2

我有一个基本表单,其中包含数据绑定到实现INotifyPropertyChanged接口的对象的控件。我想为几个属性添加一些验证,但不想通过实现IDataErrorInfo来验证几个属性。

我已经创建了执行验证并在对象中返回错误消息(如果适用)的函数。我想做的是在对象上的相关属性发生更改时从我的表单中调用这些函数,并在我的表单中设置ErrorProvider控件,其中包含从验证函数返回的任何错误消息。

我尝试将事件处理程序连接到 Validating 和 LostFocus 事件,但这些似乎在我的对象更新之前触发,因此它们没有验证正确的数据。只有当我离开文本框,返回然后再次离开时,验证才会针对正确的数据运行。

是否有另一个事件可以挂钩,以便在我的对象的属性更新后调用这些验证函数?还是我最好只实现IDataErrorInfo接口?

4

2 回答 2

1

我不确定到底是什么问题,您是说在控件失去焦点之前无法设置属性?

如果是这样,您需要将绑定设置为 updateOnPropertyChanged而不是OnValidation.

绑定到OnPropertyChanged意味着绑定立即更新,而OnValidation仅在触发验证时更新底层对象(对于大多数控件来说,当它们失去焦点时)。

于 2008-09-15T13:23:02.440 回答
1

我想我在 Cameron 的帖子的帮助下找到了解决问题的方法。我已将绑定更改为更新 OnPropertyChanged,现在当我将事件处理程序连接到 LostFocus 事件时,正在对文本框中的“新”值执行验证,而不是之前保存在对象中的值

于 2008-09-15T13:32:31.450 回答