【问题标题】:Force WPF component to validate when an event is raised强制 WPF 组件在引发事件时进行验证
【发布时间】:2010-10-05 12:42:01
【问题描述】:

在我的 MVVM 应用程序中,我有一个实现 IDataErrorInfo 和 INotifyPropertyChanged 的​​元素列表

当引发 propertychanged 事件时,视图会验证 VM 对象。

问题在于验证结果不仅取决于对象的内部状态,还取决于属于列表的其他对象的“环境”。

所以我需要在每次删除或更新对象时对列表的所有元素调用验证。

我怎样才能以这种方式强制验证?

【问题讨论】:

    标签: wpf validation


    【解决方案1】:

    在保存列表的 VM 中,每次列表更改时,迭代列表并告诉每个对象通过将属性名称设置为空字符串。

    听起来您的验证可能跨越多个对象,在这种情况下,您需要从上述 VM 运行验证并在集合中的适当对象中设置错误消息,然后在这些对象上引发属性更改事件。

    我以前通过在实现 IDataErrorInfo 的对象上使用 SetErrorMessage(string string) 公共方法和公共 OnPropertyChanged(string) 方法来完成此操作,以便我可以设置错误并从对象外部引发上下文属性更改事件。

    错误将存储在字典中,this[string] 属性将在字典中查找错误并运行自己的验证。

    【讨论】:

      【解决方案2】:

      嘿,我已经回答了你的问题。仅当添加或删除元素时,名为 ObservableCollection 的默认列表才会引发事件。如果元素更改属性将不会被提升。

      您可以继承 ObservableCollection 并为每个项目添加事件。 StackOverFlow 的一位同事在此链接中提供了一个非常好的实现。 ObservableCollection that also monitors changes on the elements in collection
      它太好了,我已经尝试过并使用过。它工作得很好。希望它对您有所帮助,并让您朝着正确的方向前进!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 2011-12-09
        • 2015-07-24
        • 2016-09-30
        • 2011-05-05
        • 2011-01-26
        相关资源
        最近更新 更多