我想驗證DataGridCell
基於其他DataGridRows
在同一DataGrid
的值。但在我繼承的MyValidationRule
對象中,我無法訪問DataGrid
的所有綁定項目,但只能訪問當前行。DataGrid行驗證基於其他行
如何在ValidationRule
的Validate()
方法中訪問DataGrid的其他綁定項?
我想驗證DataGridCell
基於其他DataGridRows
在同一DataGrid
的值。但在我繼承的MyValidationRule
對象中,我無法訪問DataGrid
的所有綁定項目,但只能訪問當前行。DataGrid行驗證基於其他行
如何在ValidationRule
的Validate()
方法中訪問DataGrid的其他綁定項?
你想要做什麼,我認爲是按照視覺樹高達DataGrid中,並從那裏訪問的ItemsSource來進行驗證。像這樣的...
public class SampleRowValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
BindingGroup bg = value as BindingGroup;
if (bg != null && bg.Items.Count > 0)
{
DataGridRow dgrow = bg.Owner as DataGridRow;
if(dgrow != null)
{
DataGrid dg = GetParent<DataGrid>(dgrow);
// ... add more
}
}
return new ValidationResult(true, null);
}
private T GetParent<T>(DependencyObject d) where T : class
{
while (d != null && !(d is T))
{
d = VisualTreeHelper.GetParent(d);
}
return d as T;
}
}
您可以將依賴項屬性添加到您的自定義ValidationRule
類,並將其綁定到DataGrid
。
雖然它需要一些努力。您需要創建一個從DependencyObject
派生的包裝類,並使用Freezable
捕獲DataContext
。以下TechNet文章都對此進行了解釋。請參考它。
WPF:傳遞一個數據綁定值與驗證規則:https://social.technet.microsoft.com/wiki/contents/articles/31422.wpf-passing-a-data-bound-value-to-a-validation-rule.aspx