Wie funktioniert IDataErrorInfo?

8

Ich untersuche gerade die Validierung für meine WPF-App und sehe die Erwähnung von IDataErrorInfo . Es gibt jedoch nur wenige Anleitungen, wie man es benutzt und noch schlimmer gibt es keine, die erklären, wie es funktioniert.

Auf der MSND.com-Seite gibt es MSDN

%Vor%

Ich sehe, was hier vor sich geht, aber ich habe keine Ahnung, was es wirklich mit meinen Daten macht.

Wann werden diese 2 Eigenschaften verwendet? Nehmen wir an, jemand setzt Age auf 400: Der Setter der Eigenschaft wird aufgerufen. Wird das Fehlerding aufhören, es zu setzen? Wenn nicht und es nur warnt, dass die Nummer falsch ist, was soll jemanden daran hindern, die Information zu speichern, wie es ist? Es gibt keine IsValid() -Methode, die überprüft werden kann, oder?

Würde gerne wissen, was passiert, bevor die Vorhänge.

    
Ingó Vals 24.06.2010, 10:48
quelle

2 Antworten

6

Die Eigenschaft Error wird normalerweise nicht verwendet, aber Sie müssen sie definieren, um die Schnittstelle zu implementieren. Wie die Deklaration sagt, wird die Validierung nicht verhindern, dass die Eigenschaft mit dem falschen Wert gesetzt wird, aber Sie können die Eigenschaft auf einen Standardwert setzen. Lass mich dir zeigen, wie ich es benutze. Ich habe ein paar TextBox es, die ich habe, um die Werte zu validieren, die sie haben. Anstatt eine MessageBox mit dem Fehler zu zeigen, wenn die Menge aufgerufen wird, möchte ich einen "Webly" -Ansatz verwenden: Ich möchte, dass der Rand und der Hintergrund von TextBox rot sind, wenn ein ungültiger Wert gesetzt ist und der Tooltip von TextBox , um den Fehler zu zeigen.

Dies ist meine XAML für TextBox:

%Vor%

Eine sehr wichtige Anmerkung zum Konverter. Ich habe eine Ausnahme erhalten, als ich einen ungültigen Wert eingegeben habe und dann einen guten Wert angegeben habe. Irgendwie, vielleicht im Zusammenhang mit UpdateSourceTrigger=PropertyChanged , gab es eine Zeit, als die HasError-Eigenschaft wahr war, aber kein Fehler gesetzt war (siehe link ). Also hier ist der Code für den Konverter:

%Vor%

Um zu verhindern, dass der ungültige Wert in meiner Modellschicht gespeichert wird, verwende ich die gleiche Methode, um zu überprüfen, ob ich die Daten an das Modell übergeben soll. Wenn der Wert ungültig ist, lege ich einfach die Eigenschaft fest und rufe keine Menge der Eigenschaft im Modell auf. Überprüfen Sie den Code:

%Vor%     
jpsstavares 24.06.2010, 17:38
quelle
2

Was ich von IDataErrorInfo weiß, wird nur für UI Zwecke verwendet. Was es tut, ist eine einfache Möglichkeit, die Fehlermeldung (en) an die WPF UI zu binden. Da WPF UI die Objekte identifiziert, die IDataErrorInfo genau wie INotifyPropertyChanged implementieren, müssen Sie keinen zusätzlichen Code schreiben, um die Fehlermeldungen in UI anzuzeigen.

Noch eine Sache, es wird nicht aufhören, den falschen Wert einzustellen. Es teilt dem WPF UI (wenn WPF UI den Indexer, der den Eigenschaftsnamen bereitstellt) den Wert in einer bestimmten Eigenschaft nicht richtig mit.

    
decyclone 24.06.2010 14:24
quelle

Tags und Links