属性更新后,对数据绑定对象执行验证
时间:2020-03-05 18:53:25 来源:igfitidea点击:
我有一个带有控件的基本表单,这些控件数据绑定到实现INotifyPropertyChanged接口的对象。我想对几个属性添加一些验证,但是不想为了验证几个属性而执行IDataErrorInfo。
我已经创建了执行验证并在对象中返回错误消息(如果适用)的函数。我想做的是,当对象的相关属性发生更改时,从表单中调用这些函数,并使用验证函数返回的任何错误消息在表单中设置ErrorProvider控件。
我尝试将事件处理程序连接到Validating和LostFocus事件,但是这些事件似乎在更新对象之前就触发了,因此它们没有验证正确的数据。仅当我离开文本框时,再返回,然后再次使验证针对正确的数据运行。
是否有另一个事件可以挂接到我的对象上,以便在更新对象的属性后可以调用这些验证函数?还是我最好只实现IDataErrorInfo接口?
解决方案
回答
我不确定问题到底出在哪里,我们是在说控件失去焦点之前才能设置属性吗?
如果是这样,则需要将绑定设置为更新OnPropertyChanged而不是OnValidation。
绑定到OnPropertyChanged意味着绑定会立即更新,而OnValidation仅在触发Validation时更新基础对象(对于大多数控件而言,当它们失去焦点时)。
回答
我想我已经在Cameron的帖子的帮助下找到了解决该问题的方法。我已经更改了绑定以更新OnPropertyChanged,现在将事件处理程序连接到LostFocus事件时,验证是针对文本框中的"新"值而不是先前对象中保存的值进行的