EDM: Validieren von Entitäten mit IDataErrorInfo

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Die Validierung bei der Eingabe von Daten ist eines der wichtigsten Themen bei der Erstellung benutzerfreundlicher Anwendungen. Nachdem der Artikel “EDM: Ausnahmen beim Speichern behandeln” gezeigt hat, wozu Sie im Rahmen der Validierung die durch Restriktionen im Datenmodell auftretenden Exceptions nutzen können, schauen wir uns nun einen einfachen Weg an, um Validierungsregeln in Entitätsklassen zu definieren und beim Fehlschlagen der Validierung entsprechende Meldungen in der Benutzeroberfläche auszugeben. Dabei zeigen wir hier den Umgang mit der Schnittstelle “IDataErrorInfo”.

Beispielanwendung

Wie im oben genannten Artikel nutzen wir wieder die Beispielanwendung Bestellverwaltung. Bevor die im Datenmodell dieser Anwendung festgelegten Restriktionen greifen und bei Fehleingaben Exceptions auslösen, wollen wir Validierungen programmieren, um Fehleingaben des Benutzers zu vermeiden. In diesem Fall schauen wir uns die Seite Kundendetails.xaml.cs an, um die Programmierung der Validierung zu veranschaulichen. Dies soll im Ergebnis wie in Bild 1 aussehen.

Beispiel für eine einfache Validierungsmeldung

Bild 1: Beispiel für eine einfache Validierungsmeldung

Validierung

Die hier vorgestellten Techniken zur Validierung von Benutzereingaben beziehen sich auf die Untersuchung der jeweiligen Entität – ist ein Wert in einem Feld mit einem eindeutigen Index bereits vorhanden Darf ein Feld überhaupt leer sein Hat der Benutzer auch ein gültiges Datum eingegeben Liegt der Zahlenwert im zulässigen Bereich

Validierung auf Feldebene

Validierungen können Sie auf mehrere Arten durchführen. Der Artikel EDM: Ausnahmen beim Speichern behandeln zeigt, wie Sie erst beim Auftreten von Fehlern beim Speichern auf fehlerhafte Eingaben des Benutzers reagieren können. Davor gibt es noch mindestens zwei weitere Methoden:

  • Validieren direkt nach der Eingabe eines Wertes in ein Steuerelement und Hinweis auf die fehlerhafte Eingabe
  • Validieren, nachdem der Benutzer den Speichervorgang initiiert hat, aber bevor das Speichern selbst stattfindet. Hier können dann nicht nur einzelne Felder isoliert, sondern auch mehrere Felder im Zusammenhang untersucht werden. Wie dies gelingt, zeigt zum Beispiel der Artikel EDM: Validieren von Entiten mit IValidatableObject.

In diesem Artikel schauen wir uns die einfachere Validierung direkt nach der Eingabe eines Wertes an.

Für den Benutzer hat dies beispielsweise den Vorteil, dass er Fehleingaben direkt erkennt und diese direkt korrigieren kann.

Einfache Validierung

In vielen Fällen reicht eine einfache Validierung der Eingaben für Steuerelemente aus. Damit meinen wir, dass nur die Werte einzelner Steuerelemente geprüft werden sollen, und zwar direkt nach der Eingabe. So können Sie beispielsweise abfragen, ob ein Wert eine bestimmte Mindestlänge erreicht, und bei Nichterfüllung dieser Vorgabe einen optischen Hinweis einblenden. Dieser Artikel zeigt, wie Sie eine solche Validierung zu einer Anwendung hinzufügen können.

Beispielanwendung

Die Beispielanwendung heißt Bestellverwaltung. Die im Fenster MainWindow eingeblendete Seite Kundendetails.xaml soll zeigen, wie Sie die hier vorgestellte Art der Validierung implementieren.

Ablauf der Validierung

Die Validierung mit der hier vorgestellten Methode geschieht immer gleich nach dem Abschluss der Eingabe in ein Feld. Sie löst dann die Anzeige des Steuerelements mit der fehlerhaften Eingabe mit rotem Rahmen und mit einem Warnsymbol aus. Das Überfahren des Warnsymbols mit der Maus führt zur Anzeige eines ToolTip-Textes, der weitere Informationen zum vorliegenden Fehler liefert.

Aufbau der Validierung

Die Validierung basiert auf zwei verschiedenen Elementen. Das erste Element ist die Klasse, welche die Entität der zu validierenden Objekte beschreibt, in unserem Fall also etwa Kunde.cs. Hier legen wir in Form einer Methode die Regeln fest, nach denen das soeben geänderte Steuerelement geprüft werden soll. Damit erhalten wir eine Basis, die wir für alle Zugriffe auf Objekte dieser Klasse nutzen können, was die Wiederverwendbarkeit dieser Klasse erhöht. Der zweite Teil der Validierung ist das Hinzufügen einer bestimmten Eigenschaft zum Binding des Steuerelements, im Falle eines Textfeldes also beispielsweise zum Attribut Text. Außerdem müssen wir noch definieren, wie sich das Aussehen des Textfeldes ändern soll, wenn die Validierung fehlgeschlagen ist. Immerhin wollen wir den Benutzer ja auch informieren, wenn dieser eine Fehleingabe tätigt. Dies erledigen wir durch eine entsprechende Vorlage für das TextBox-Steuerelement. Schauen wir uns nun die drei Elemente der Validierung an.

Anpassen der Klasse Kunde.cs

Unser Entity Data Model, das wir auf Basis der SQL Server-Datenbank Bestellverwaltung erstellt haben, enthält auch eine Klasse namens Kunde.cs, welche die Eigenschaften eines Kunden abbildet. Diese erweitern wir nun um die Schnittstelle IDataErrorInfo. Da diese in der Bibliothek System.ComponentModel beschrieben wird, fügen wir zunächst einen Verweis auf diese Schnittstelle per using-Schlüsselwort hinzu:

 

Schreibe einen Kommentar