Datagrid ValidationRule需要引用Row ViewModel

时间:2013-08-20 21:25:32

标签: wpf visual-studio-2010 validation datagrid

在VS-2010中,对于列Datagrid使用ValidationRules的{​​{1}},是否有办法为行的绑定视图模型提供ValidationRule引用?在某些情况下,验证逻辑将取决于视图模型的当前状态。

我已阅读过使用ValidationRulesDependencyObjects添加参数的问题。但是这些示例仅显示将验证参数绑定到StaticResources(例如max& min值)。由于ValidationRule不是逻辑树的一部分,因此无法确定如何为验证规则创建参数以引用正在编辑的DataGridRow的绑定视图模型。

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

1 个答案:

答案 0 :(得分:0)

我做了一个解决方法,但它远非优雅。我最终向DependencyProperty添加了ValidationRule - 但ValidationRule并未从DependencyObject继承,因此您必须将参数转储到{{1}的单独类中1}},然后将该类的实例添加到DependencyObject

在这种情况下,我为ValidationRule创建的“参数”是ValidationRule本身。我必须在窗口资源中使用绑定代理才能实现此目的,因为DataGrid不是逻辑树的一部分。

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

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

Attached or dependecy Property for ValidationRule WPF