首页 文章

C#WPF MVVM数据验证

提问于
浏览
0

我有以下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 回答

  • 1

    您的 CanExecute 处理程序应该只是引用您的 HasErrors 属性:

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

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

    您是否可以告诉我,如果在每次击键后没有检查,是否存在任何验证错误, property 系统可能如何知道?想一想......任何击键都可能使模型无效 . 无论哪种方式,您都不会注意到任何延迟,因为它重新验证了模型 .

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

    如果你好运...微软刚刚在 Binding 类中添加了 Delay 属性 . 这使您可以设置在目标值更改后更新绑定源之前等待的时间(以毫秒为单位) . 有关完整信息,请参阅MSDN上的BindingBase.Delay Property页面 .

相关问题