2017-03-29 5 views
0

Ich möchte eine DataGridCell basierend auf den Werten anderer DataGridRows in der gleichen DataGrid validieren. Aber in meinem ererbten Objekt MyValidationRule kann ich nicht auf alle gebundenen Objekte des DataGrid zugreifen, sondern nur auf die aktuelle Zeile.DataGrid Zeile Validierung Basis auf anderen Zeilen

Wie kann ich auf andere gebundene Elemente eines DataGrid in der Validate() Methode eines zugreifen?

Antwort

0

Was wollen Sie tun, denke ich, ist die visuelle Struktur folgen bis zum Datagrid und von dort Zugriff auf die Itemssource die Validierung durchzuführen. Etwas wie dieses ...

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; 

    } 
} 
0

Sie könnten Ihrer benutzerdefinierten -Klasse eine Abhängigkeitseigenschaft hinzufügen und diese an die DataGrid binden.

Es erfordert jedoch einige Mühe. Sie müssen eine Wrapper-Klasse erstellen, die von DependencyObject abgeleitet ist, und die DataContext mithilfe einer Freezable erfassen. Alles wird im folgenden TechNet-Artikel erläutert. Bitte nehmen Sie Bezug darauf.

WPF: ein Data Bound Wert zu einem Gültigkeitsregel Passing:https://social.technet.microsoft.com/wiki/contents/articles/31422.wpf-passing-a-data-bound-value-to-a-validation-rule.aspx

Verwandte Themen