当事件被触发时,强制WPF组件进行验证

4
在我的MVVM应用程序中,我有一个实现了IDataErrorInfo和INotifyPropertyChanged的元素列表。
当触发propertychanged事件时,视图将验证VM对象。
问题在于,验证结果不仅取决于对象的内部状态,还取决于“环境”,即属于列表的其他对象。
因此,每次删除或更新对象时,我需要调用列表中所有元素的验证。
如何以这种方式强制进行验证?
2个回答

1
在保存列表的虚拟机内,每当您的列表发生变化时,请遍历列表并告诉每个对象引发属性更改通知,无论是对您知道可能无效的属性还是对每个属性设置属性名称为空字符串。
听起来您的验证可能涉及多个对象,在这种情况下,您需要从上面提到的虚拟机中运行您的验证,并在集合中的适当对象中设置错误消息,然后引发这些对象的属性更改事件。
我之前通过在实现IDataErrorInfo的对象上具有一个名为SetErrorMessage(string string)的公共方法以及一个公共的OnPropertyChanged(string)方法来完成这一点,以便我可以从对象外部设置错误并引发上下文属性更改事件。
错误将存储在字典中,而this[string]属性将查找字典中的错误并运行自身的验证。

0

嘿,我有一个关于你问题的答案。默认列表叫做ObservableCollection只会在添加或删除元素时引发事件。如果元素更改属性,则不会引发事件。

您可以子类化ObservableCollection并为每个项目添加事件。这里有一个非常好的实现,由StackOverFlow的一位成员提供的链接。 ObservableCollection that also monitors changes on the elements in collection
它太棒了,我已经尝试并使用过了。它运行得非常好。希望它能帮助您并将您引导到正确的方向!!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接