问题描述
我开始使用ReactiveUI.Validation。在ReactiveCommand.Create()中使用this.IsValid()作为CanExecute的参数时,IsValid是一个用户输入的“ late”。
这是一个重现该问题的ViewModel.cs,为了进行测试,我将其绑定到WPF文本框:
public class ViewModel : ReactiveValidationObject<ViewModel>
{
private readonly ReactiveCommand<string,Unit> Command;
private string _myProperty;
public string MyProperty
{
get => _myProperty;
set => this.RaiseAndSetIfChanged(ref _myProperty,value);
}
public ViewModel()
{
Command = ReactiveCommand.Create<string>(x => SetMyProperty(x),this.IsValid());
this
.WhenAnyValue(x => x.MyProperty)
.Do(x => Console.WriteLine("Property value = " + x))
.InvokeCommand(Command);
this.ValidationRule(
viewModel => viewModel.MyProperty,x => !string.IsNullOrEmpty(x) && x.Length > 3,"Enter a value");
this.IsValid()
.Subscribe(x => Console.WriteLine("IsValid = " + x));
}
private Unit SetMyProperty(string value)
{
Console.WriteLine("Entered method");
return Unit.Default;
}
}
这是我得到的控制台输出(执行命令时注意):
Property value = 1
Property value = 12
Property value = 123
Property value = 1234
IsValid = True
Property value = 12345
Entered method
Property value = 1234
Entered method
Property value = 123
Entered method
IsValid = False
Property value = 12
Property value = 1
这是我期望的控制台输出:
Property value = 1
Property value = 12
Property value = 123
Property value = 1234
IsValid = True
Entered method
Property value = 12345
Entered method
Property value = 1234
Entered method
Property value = 123
IsValid = False
Property value = 12
Property value = 1
我正确使用了吗?有没有办法在InvokeCommand之前强制验证?
非常感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)