Laden...

Validation mit mehreren Controls (IDataErrorInfo)

Erstellt von Cannon vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.185 Views
C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren
Validation mit mehreren Controls (IDataErrorInfo)

Ich nutzte die IDataErrorInfo-Schnittstelle um meine Steuerelemente zu validieren. Nun möchte ich aber gleichzeitig mehrere Steuerelemente validieren, wenn die irgendwas mit einander zu tun haben. Einfaches Beispiel:

3 Textboxen: Die Zahlen 1, 1 und 2 sind deren Inhalt. Die Fehlerüberprüfung soll nun feststellen, wenn das Ergebnis nicht mehr oder es stimmt. Das heißt jetzt ist alles okay, sobald ich aber in dem Beispiel eine Textbox ändere sollen alle 3 einen Fehler melden.

| 1 | + | 1 | = | 2 |

Der UpdateSourceTrigger ruft ja die Validierung auf, wenn PropertyChanged eintritt, aber eben nur für die eine TextBox und nicht auch für die anderen. Ich könnte natürlich das PropertyChanged für die andren TextBoxen wären der Validierung aufrufen, aber dann befinde ich mich ja in einer Endlosschleife.

Habt ihr da einen Tipp?

F
10.010 Beiträge seit 2004
vor 10 Jahren

Du Validierst nicht die Steuerelemente sondern das Model.

Und dadurch hast Du die Antwort schon, denn wenn eine Änderung eines der Werte eine Validierung aller Werte benötigt, dann ist das auch durchzuführen.

Hör bitte im eigenen Interesse auf zu denken das die Daten in den Steuerelementen gehalten werden.

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren

Ja und genau da ist die Frage, wie stoße ich die Validierung der anderen Werte idealerweise an. Ich brauche ja ein PropertyChanged-Event, um die Validierung des Wertes durchzuführen und ggf. einen Fehlerstring zurückzugeben, der dann im View angezeigt wird. Oder sehe ich das falsch?

F
10.010 Beiträge seit 2004
vor 10 Jahren

Ja, siehst du falsch.

Wenn das Ändern eines Properties die Validierung des ganzen Models bedeutet, dann ist das auch durchzuführen.
Da muss nicht für jedes Property ein PropertyChanged erfolgen.
Und das validieren liefert auch keinen Fehlerstring zurück, sondern es wird die IDataErrorInfo Schnittstelle bedient.
Das bedeutet das Error einen Wert erhält und der Indexer für jedes Property einen entsprechenden Fehlerstring hat.
Dann kannst du am Abschluss das PropertyChanged von Error aufrufen und die UI entsprechend binden.

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren

Deien Hinweise haben mir geholfen, dass Problem zu lösen. Ich speichere jetzt alle "Fehlerstrings".. (ich muss die mal so nennen) in einem Dictionary und rufe PropertyChanged auf, wenn sich Änderungen ergeben. Die IDataErrorInfo-Schnittstelle bediene ich dann aus dem Dictionary. Das Ganze nutze ich jetzt als Basisklasse für meine Models.