C#WPF MVVM数据验证

我有以下WPF-MVVM设置:

  • 带有2个文本框的视图绑定到具有UpdateSourceTrigger = PropertyChanged的ViewModel的属性,以及一个带有命令绑定到中继命令(CanExecute,Execute方法)的按钮。
  • ViewModel实现INotifyDataErrorInfo,其中2个属性用[System.ComponentModel.DataAnnotations.Required]注解。 属性设置器调用私有ViladateProperty方法,该方法将验证结果存储在错误字典中。 HasErrors属性getter检查错误字典以返回适当的值。
  • 目的是在整个表单正确验证后立即启用该按钮。 我的两个问题是:

  • 如何实现按钮中继命令的CanExecute方法,而无需针对每个属性更改调用整个模型的验证?
  • 什么是“延迟”UpdateSourceTrigger以便在每次击键时不设置相关属性的最佳方式,例如,在“无输入”后一秒钟?

  • 您的CanExecute处理程序应该简单地引用您的HasErrors属性:

    ... (canExecute) => !HasErrors; ...
    

    •如何实现按钮中继命令的CanExecute方法,而无需针对每个属性更改调用整个模型的验证?

    你能告诉我财产系统如果在每次击键后都没有检查是否有任何验证错误,可能会知道吗? 想想看......任何关键的中风都可能导致模型无效。 无论哪种方式,您都不会注意到任何延迟,因为它会重新验证模型。

    •什么是“延迟”UpdateSourceTrigger以在每次按键上设置相应属性的最佳方式,例如,在“无输入”后一秒钟?

    如果您使用的是.NET 4.5,那么您很幸运...... Microsoft刚刚为Binding类添加了一个Delay属性。 这使您可以设置在目标上的值更改后更新绑定源之前需要等待的时间量(以毫秒为单位)。 有关完整信息,请参阅MSDN上的BindingBase.Delay属性页。

    链接地址: http://www.djcxy.com/p/56149.html

    上一篇: C# WPF MVVM data validation

    下一篇: Open Child Window Standard