我有以下WPF-MVVM设置:
-
带有UpdateSourceTrigger = PropertyChanged绑定到ViewModel属性的2个文本字段的视图和带有绑定到中继命令的命令的按钮(CanExecute,Execute方法)
-
ViewModel,它实现了带有2个使用[System.ComponentModel.DataAnnotations.Required]注释的属性的INotifyDataErrorInfo . 属性设置器调用私有ViladateProperty方法,该方法将验证结果存储在错误字典中 . HasErrors属性getter检查错误字典以返回适当的值 .
目的是在整个表单正确验证后立即启用该按钮 . 我的两个问题是:
-
如何实现button relay命令的CanExecute方法,而不是为每个属性更改调用整个模型的验证?
-
UpdateSourceTrigger设置相应属性不是每次击键的最佳方法是什么,但是,例如,在"no input"一秒后?
1 回答
您的
CanExecute
处理程序应该只是引用您的HasErrors
属性:您是否可以告诉我,如果在每次击键后没有检查,是否存在任何验证错误, property 系统可能如何知道?想一想......任何击键都可能使模型无效 . 无论哪种方式,您都不会注意到任何延迟,因为它重新验证了模型 .
如果你好运...微软刚刚在
Binding
类中添加了Delay
属性 . 这使您可以设置在目标值更改后更新绑定源之前等待的时间(以毫秒为单位) . 有关完整信息,请参阅MSDN上的BindingBase.Delay Property页面 .