WPF数据表格行验证

10
WPF 4.0的DataGrid存在一个bug。
我在对象上实现了IDataErrorInfo,并有一个ObservableCollection绑定到DataGrid。列上设置了ValidatesOnDataErrors=True,但是行上没有设置。UpdateSourceTrigger="PropertyChanged"。
验证在单元格级别上完美工作。然而,当你离开一个无效的单元格,去到任何其他单元格,然后返回到无效单元格并输入有效数据时,该单元格变为有效,但行仍处于无效状态,而它应该是有效的。

然而,当您将单元格保持为无效状态,然后转到任何其他单元格,再返回到无效单元格并输入有效数据时,该单元格变为有效,但该行仍然无效,而实际上应该是有效的。完全相同的问题。 - SKINDER
1
三个人都遇到了同样的WPF问题,但还没有人发布过代码。不过这也不是一个好电影标题。:D 你们有没有想过发布一些代码或XAML呢? - dev hedgehog
3
您尝试过使用INotifyDataErrorInfo吗?据我所知,该接口是通知验证错误的推荐方法。 - Benjamin
5
我的“超级”解决方案是关闭行验证,因为只有单元格验证已经足够了,并且没有任何歧义的行为。 - SKINDER
1
当更改该单元格的属性导致获取IDataErrorInfo的HasError时,该怎么办? - Sankarann
显示剩余3条评论
2个回答

4

在一般属性验证中,一旦源更新,就会进行验证,但在RowValidation的情况下,您需要指定RowValidationRule执行RowValidation

 <DataGrid.RowValidationRules>
       <DataErrorValidationRule ValidatesOnTargetUpdated="True" ValidationStep="UpdatedValue" />
 </DataGrid.RowValidationRules>

现在,DataGrid会对行进行验证,您还可以提供RowValidationErrorTemplate以自定义格式显示错误。

1

我遇到了同样的问题。对我来说解决方法是在验证规则上设置ValidatesOnTargetUpdated="True",这似乎会在每次控件更新时强制进行另一次验证。


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