WPF Validation Control
Wenn man bei WPF z.B eine Textbox auf eine Datenquelle bindet, so kann man Validierungen durchführen lassen, ob der Wert der Textbox auch wirklich dem Datentyp der Quelle entspricht.
Gibt man z.B in eine Textbox, die auf einen Zahlenwert gebunden ist, Buchstabe ein, so sollte man das vorher überprüfen lassen und dann einen Fehler anzeigen.
Dafür gibt es das Konzept der ValidationRules. Klassen, die von dieser Basisklasse ableiten, können eine Methode Validate(..) überschreiben und dort eigene Überprüfungen durchführen.
Über das Binding Tag können diese Rules angegeben werden:
<TextBox Validation .ErrorTemplate ="{StaticResource TextBoxErrorTemplate}" >
<TextBox.Text>
<Binding Path="Name">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Eine zweite interessante Möglichkeit, ist die Darstellung von Fehlern in einer ValidationRule: Über die attached Property Validation.ErrorTemplate kann ein ControlTemplate angegeben werden, das das jeweilige zu validierende Control umschließt:
<Window.Resources>
<ControlTemplate x:Key="TextBoxErrorTemplate">
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right"
Foreground="Orange"
FontSize="12pt"
Text ="{Binding ElementName=MyAdorner, <br> Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
<Border BorderBrush="Green" BorderThickness="1">
<AdornedElementPlaceholder Name ="MyAdorner" />
</Border>
</DockPanel>
</ControlTemplate>
</Window.Resources>
Wichtig ist dabei, dass das ControlTemplate ein AdornedElementPlaceholder Element enthalten muss. Darin wird in unserem Fall die Textbox "eingepackt" / adorned. Über die gezeigt Binding Expression kann man auf die erste Fehlermeldung zugreifen und diese z.B. im Textblock darstellen.
Das Endergebnis würde so aussehen:
In diesem Artikel auf Codeproject wird gezeigt, wie man diese Funktionalität in ein ErrorProvider Control kapseln kann!
[ knom ]