我正在使用ReactiveUI处理WPF应用程序,并试图创建一个简单的身份验证窗口,例如:
文本框为空时,需要立即以错误模板化(红色边框)。在这种情况下,还需要停用“登录”按钮。
关于视图输入验证,当前存在问题,因为扩展名BindValidation()
似乎无法正常工作。 (请参见示例:https://github.com/gerardo-lijs/ReactiveUI-Validation-Sample/blob/master/01-Basic-XAML/MainWindow.xaml.cs和推荐的解决方案:ReactiveUI,WPF and Validation)
我的解决方法包含来自代码隐藏的经典wpf绑定以及使用ValidationRule
派生进行的验证。以及像这样的视图模型中的WhenAnyValue()
验证:
IObservable<bool> canLogin = this
.WhenAnyValue(
x => x.username,x => x.Password,x => x.IsBusy,(cn,un,pw,isBusy) =>
!isBusy &&
!String.IsnullOrEmpty(cn) &&
!String.IsnullOrEmpty(un) &&
!String.IsnullOrEmpty(pw));
LoginCommand = ReactiveCommand.CreateFromTask<string,bool>(_ => DoLogin(),canLogin);
如果我设置ValidationStep.RawProposedValue
,则经典的WPF验证有效(边界变为红色),而反应式按钮验证与ValidationStep.UpdateValue
一起工作。但是他们不能一起工作。
我想念什么或做错什么了?