在VS-2010中,对于列Datagrid
使用ValidationRules
的{{1}},是否有办法为行的绑定视图模型提供ValidationRule
引用?在某些情况下,验证逻辑将取决于视图模型的当前状态。
我已阅读过使用ValidationRules
向DependencyObjects
添加参数的问题。但是这些示例仅显示将验证参数绑定到StaticResources
(例如max& min值)。由于ValidationRule
不是逻辑树的一部分,因此无法确定如何为验证规则创建参数以引用正在编辑的DataGridRow
的绑定视图模型。
我知道的一种解决方法是ValidationStep
设置为UpdatedValue
时 - Value
方法的Validate
参数变为BindingExpression
,来自可以提取视图模型。但是我需要在更新viewmodel之前进行验证,所以这对我没有帮助。
答案 0 :(得分:0)
我做了一个解决方法,但它远非优雅。我最终向DependencyProperty
添加了ValidationRule
- 但ValidationRule
并未从DependencyObject
继承,因此您必须将参数转储到{{1}的单独类中1}},然后将该类的实例添加到DependencyObject
。
在这种情况下,我为ValidationRule
创建的“参数”是ValidationRule
本身。我必须在窗口资源中使用绑定代理才能实现此目的,因为DataGrid
不是逻辑树的一部分。
当ValidationRule
实际运行ValidationRule
时,我使用Validate
实例查找编辑行,获取该行的绑定视图模型,现在我可以检查viewmodel以确定如果建议的价值是可以接受的。
我可能会添加一些代码,但说实话,必须有一个比这更好的方法。我已经可以想到一些可能的错误了。以下是我发现最有帮助的例子。