ReactiveUI.Validation:调用ReactiveCommand后更新this.IsValid

问题描述

我开始使用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 (将#修改为@)