使ValidationRule也适用于其他列表对象

时间:2017-07-05 01:38:09

标签: wpf data-binding

假设我有一个对象ListCollectionView并将其绑定到数据网格。我将对象的Name属性绑定到TextBox(数据网格列之一)的Text属性并添加我的特定ValidationRule。

现在我想要规则来检查Name属性是否重复,我需要检查ListCollectionView中的其他对象,如果有对象' Name属性等于此Name,验证结果将为false。

我的问题是这个检查只能应用于编辑过的对象,所以只有当它的名称被复制时,这个对象才会变成红色,但我怎样才能检查其他列表对象,使其他对象的Name属性等于这个编辑过的也变红了?谢谢。

1 个答案:

答案 0 :(得分:0)

您是正确的,ValidationRule只能访问它绑定的数据。但是你可以编写一个自定义的ValidationRule - 我有一个blog post detailing it here,然后你可以为它添加额外的属性,这样你就可以注入应该检查你的绑定值的相应数据。

但是,您将遇到一个棘手的问题 - 数据网格中的单元格无法自然访问数据网格的DataContext,因为数据网格列不在可视树中。要解决该问题,您可以使用包含(绑定)ListCollectionView的静态代理对象,然后可以通过ValidationRule(example 1example 2)绑定此代理对象。