【问题标题】:Validating collection elements in WPF在 WPF 中验证集合元素
【发布时间】:2010-05-28 09:08:27
【问题描述】:

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

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

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

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

任何人都知道正确的做法吗?

【问题讨论】:

    标签: wpf validation collections datagrid


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 2015-01-31
      相关资源
      最近更新 更多