我有一个带有控件的基本表单,这些控件可以数据绑定到实现 INotifyPropertyChanged 接口的对象。我想为一些属性添加一些验证,但不想为了验证一些属性而实现 IDataErrorInfo 。
我创建了执行验证的函数,并在对象中返回错误消息(如果适用)。我想要做的是当对象的相关属性发生变化时从我的表单中调用这些函数,并在我的表单中设置 ErrorProvider 控件以及从验证函数返回的任何错误消息
我曾尝试将事件处理程序连接到Validating和LostFocus事件,但这些事件似乎在我的对象更新之前触发,因此它们没有验证正确的数据。只有当我离开文本框时,返回然后再次离开,验证将针对正确的数据运行。
是否还有其他可以挂钩的事件,以便在我的对象上的属性更新后可以调用这些验证函数?或者我最好只实现 IDataErrorInfo 接口?
答案 0 :(得分:1)
我不确定问题到底是什么,你是说在控件失去焦点之前你不能让属性设置好吗?
如果是,您需要将绑定设置为更新OnPropertyChanged
而不是OnValidation
。
绑定到OnPropertyChanged
意味着绑定会立即更新,而OnValidation
仅在触发验证时更新基础对象(大多数控件都是在失去焦点时)。
答案 1 :(得分:1)
我想我已经在Cameron的帖子的帮助下找到了问题的解决方案。我已更改绑定以更新OnPropertyChanged,现在当我将事件处理程序连接到LostFocus事件时,正在对文本框中的“新”值执行验证,而不是先前在对象中保存的值