【问题标题】:Performing validation on a databound object after the property has been updated在属性更新后对数据绑定对象执行验证
【发布时间】:2010-09-08 22:15:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net vb.net validation data-binding


    【解决方案1】:

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

    如果是这样,您需要将绑定设置为更新OnPropertyChanged 而不是OnValidation

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

    【讨论】:

    • 当控件失去焦点时设置属性很好,然后我想做的是附加到我的文本框上的一个事件,该事件在属性更新时触发,以便我可以调用验证函数
    • 然后我只处理 TextChanged 事件(在文本框上)。或者你可以挂钩到你的对象的 INotifyPropertyChanged 事件。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多