强制WPF组件在发生事件时进行验证

时间:2010-10-05 12:42:02

标签: wpf validation

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

视图在引发propertychanged事件时验证VM对象。

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

因此,每次删除或更新对象时,我都需要对列表的所有元素进行验证。

我如何以这种方式强制验证?

2 个答案:

答案 0 :(得分:1)

在保存列表的VM中,每次列表发生更改时,遍历列表并告诉每个对象在您知道可能无效的属性上或者通过将属性名称设置为每个属性来引发属性更改通知空字符串。

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

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

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

答案 1 :(得分:0)

嘿,我对你的问题有一个答案。名为ObservableCollection的默认列表仅在添加或删除元素时才会引发事件。如果元素改变属性不会被提出。

您可以为ObservableCollection创建子类,并为每个项添加事件。 StackOverFlow的一个人给出了这个链接中非常好的实现。 ObservableCollection that also monitors changes on the elements in collection
它太好了,我已经尝试过并且使用过。它的工作非常棒。希望它可以帮助你,让你朝着正确的方向前进!