1

在 VS-2010 中,对于Datagrid其列使用ValidationRules的,有什么方法ValidationRule可以引用该行的绑定视图模型?在某些情况下,验证逻辑将取决于视图模型的当前状态。

我已阅读有关将参数添加到ValidationRulesusing的信息DependencyObjects。但是这些示例仅显示将验证参数绑定到StaticResources(例如最大值和最小值)。由于ValidationRule它不是逻辑树的一部分,我无法弄清楚如何为验证规则创建一个参数来引用DataGridRow正在编辑的绑定视图模型。

我知道的一种解决方法是 whenValidationStep设置为UpdatedValue- 然后方法的Value参数Validate变为BindingExpression,可以从中提取视图模型。但是我需要在更新视图模型之前进行验证,所以这对我没有帮助。

4

1 回答 1

0

好吧,我设法解决了问题,但它远非优雅。我确实最终将 a 添加DependencyPropertyValidationRule- 但ValidationRule不继承自,DependencyObject因此您必须将参数转储到一个单独的类中,即 a DependencyObject,然后将该类的实例添加到ValidationRule.

在这种情况下,我为它创建的“参数”ValidationRule就是它DataGrid本身。我不得不在窗口资源中使用绑定代理来完成此操作,因为ValidationRule它不是逻辑树的一部分。

ValidationRule实际运行Validate时,我使用DataGrid实例查找编辑行,获取该行的绑定视图模型,现在我可以检查视图模型以确定建议的值是否可以接受。

我可能会添加一些代码,但老实说,必须有比这更好的方法。我已经可以想到一些可能的错误。下面是我发现最有帮助的例子。

ValidationRule WPF 的附加或依赖属性

于 2013-12-13T22:32:14.667 回答