验证WPF中的集合元素

时间:2010-05-28 09:08:28

标签: wpf validation collections datagrid

我想知道人们如何在WPF中验证集合。让我们举例来说,我有一个可观察的ViewModel集合,我绑定到网格的项目源,用户可以在网格中添加新行并需要填充它们。

首先,我需要对每一行进行验证,以确保填写每个ViewModel的必填字段。这对每一行都很简单。

然而,第二级验证是整个集合。例如,我想确保集合中没有两行具有相同的标识符,或者没有两行具有相同的名称。我基本上检查不同行中的重复属性。我还有更复杂的条件,我必须确保集合中至少有一个项目具有一些属性集。

如何获得允许我检查这些规则的验证规则,验证整个集合而不是单个项目。我还想打印数据网格上方的任何验证错误,以便用户可以解决问题,并且当用户修复每个不同的规则时,消息将更新或消失。

任何人都有正确的方法经验吗?

1 个答案:

答案 0 :(得分:2)

诀窍是放置集合验证逻辑,以便在ItemsControl的ItemsSource属性更改时调用它。如果您在视图模型上使用IDataErrorInfo,则在ItemsSource绑定上设置ValidatesOnDataErrors = True,并且当绑定的集合属性的名称传递到接口的错误索引器时,运行逻辑以确定该属性是否仍然有效。如果您正在使用自定义验证规则,那么将规则放入ItemsSource绑定应该没问题。

接下来,在视图模型中,每当发生更改集合的有效/无效状态的事件时,都会为ItemsSource绑定属性引发PropertyChanged事件。例如,如果集合需要一定数量的元素,那么请收听CollectionChanged事件。每当集合发生更改时,都会为ItemsSource绑定属性引发PropertyChanged事件。这告诉WPF该属性已更改,从而导致其重新生效。因此,只要集合发生更改,集合验证逻辑就会运行,如果集合无效,WPF会显示错误装饰,或者如果集合变为有效,WPF将删除装饰器。