2013-08-20 23 views
1

在VS-2010中,對於列號爲ValidationRulesDatagrid,有什麼方法可以給ValidationRule引用行的綁定視圖模型?在某些情況下,驗證邏輯將取決於視圖模型的當前狀態。Datagrid ValidationRule需要引用Row ViewModel

我已閱讀使用DependencyObjects將參數添加到ValidationRules。但是這些示例僅顯示將驗證參數綁定到StaticResources(例如最小值爲最大值&)。由於ValidationRule不是邏輯樹的一部分,我無法計算如何爲驗證規則創建參數,以引用正在編輯的DataGridRow的綁定視圖模型。

ValidationStep時被設置爲UpdatedValue的一個解決方法,我知道的是 - 則Validate方法的Value參數成爲BindingExpression,從該視圖模型可以被提取。但是我需要在更新視圖模型之前進行驗證,所以這對我沒有幫助。

回答

0

嗯,我管理一個解決方法,但它遠非優雅。我確實最終將DependencyProperty添加到ValidationRule - 但ValidationRule不會從DependencyObject繼承,因此您必須將參數轉儲到單獨的類中,該類是DependencyObject,然後將該類的實例添加到ValidationRule

在這種情況下,我爲ValidationRule創建的「參數」是DataGrid本身。我不得不在窗口資源中使用綁定代理來實現此目的,因爲ValidationRule不是邏輯樹的一部分。

ValidationRule實際運行Validate,我用的是DataGrid實例找到編輯行,得到該行的綁定視圖模型,現在我可以檢查視圖模型,以確定是否該建議值是可以接受的。

我可能會添加一些代碼,但在所有的誠實方面,必須有一個比這更好的方式。我已經可以想到一些可能的錯誤。以下是我發現最有用的例子。

Attached or dependecy Property for ValidationRule WPF