WPF-Datenbindung und Validierungsregeln Best Practices
-
09-06-2019 - |
Frage
Ich habe eine sehr einfache WPF-Anwendung, in der ich Daten verwende Bindung Bearbeitung einiger benutzerdefinierten CLR-Objekte zu ermöglichen. Ich bin zu wollen nun einige der Eingabevalidierung in setzen, wenn der Benutzer klickt speichern. Allerdings sind alle WPF Bücher, die ich habe zu diesem Thema widmen nicht wirklich keinen Platz. Ich sehe, dass Sie benutzerdefinierte Validationrules erstellen können, aber ich frage mich, ob dies für meine Bedürfnisse zu viel des Guten wäre.
Also meine Frage ist: gibt es eine gute Beispielanwendung oder Artikel irgendwo, die für die Validierung von Benutzereingaben in WPF Best Practice zeigt
Lösung
Ich denke, die neue bevorzugte Art und Weise IDataErrorInfo verwenden könnte sein,
Lesen Sie mehr hier
Andere Tipps
Von MS Patterns & Practices Dokumentation :
Datenvalidierung und Fehlerberichterstattung
Ihre Ansicht Modell oder Modell wird oft sein erforderliche Datenvalidierung auszuführen und zu signalisieren, eine beliebige Datenvalidierung Fehler der Ansicht, so dass der Benutzer handeln kann, sie zu korrigieren.
Silverlight und WPF unterstützen zur Verwaltung von Datenvalidierungsfehler die auftreten, wenn einzelne wechselnden Eigenschaften, die zu den Kontrollen gebunden sind in der Ansicht. Für einzelne Eigenschaften Das sind dagetenbundenen zu einer Kontrolle, die View-Modell oder das Modell kann ein Datensignal, Validierungsfehler innerhalb der Eigenschaft Setter durch eine eingehende schlechte Ablehnung Wert und eine Ausnahme zu werfen. Wenn die ValidatesOnExceptions Eigenschaft auf die Datenbindung gilt, wobei die Daten Bindungsmodul in WPF und Silver wird behandelt die Ausnahme und Anzeige ein visueller Hinweis für den Benutzer, dass es ein Datenvalidierungsfehler.
Allerdings werfen Ausnahmen Eigenschaften sollten auf diese Weise sein wenn möglich, vermieden werden. Eine Alternative Ansatz ist die zur Umsetzung IDataErrorInfo oder INotifyDataErrorInfo Schnittstellen auf Ihrer Ansicht nach Modell oder Modell Klassen. Diese Schnittstellen ermöglichen Ihren Ansicht Modell oder Modelldaten durchzuführen, Validierung für einen oder mehr Immobilien Werte und eine Fehlermeldung zurück zu der Ansicht, so dass der Benutzer sein kann benachrichtigt den Fehler.
Die Dokumentation geht auf zu erklären, wie IDataErrorInfo und INotifyDataErrorInfo zu implementieren.
personaly, ich bin Ausnahmen mit Validierung zu behandeln. es erfordert folgende Schritte:
- in Ihrer Datenbindung Ausdruck, müssen Sie "ValidatesOnException = True" hinzufügen
- in Sie Datenobjekt Sie sind verbindlich zu, müssen Sie DependencyPropertyChanged Handler hinzuzufügen, wo Sie überprüfen, ob neue Wert Ihre Bedingungen erfüllt - wenn nicht - Sie dem Objekt alten Wert wieder her (wenn Sie müssen) und Sie Ausnahme auslösen.
- in Ihrer Kontrolle Vorlage ungültigen Wert in der Steuerung verwenden, um anzuzeigen, können Sie Fehlererfassung und Anzeigeausnahmemeldung zugreifen zu können.
Der Trick hier ist nur für Objekte zu binden, die von DependencyObject abgeleitet werden. einfache Implementierung von INotifyPropertyChanged würde nicht funktionieren - es ist ein Fehler im Rahmen ist, mit dem Sie den Zugriff auf Fehlersammlung verhindert.
Überprüfen Sie auch diesem Artikel . Angeblich soll Microsoft veröffentlicht ihr Enterprise Library (v4.0) von ihren Mustern und Praktiken, wo sie die Validierung Thema abdecken, sondern Gott weiß, warum sie nicht die Validierung für WPF enthalten war, so der Blog-Post ich lenken Sie zu, erklärt, was der Autor es anzupassen hat. Hoffe, das hilft!
Vielleicht haben Sie Interesse an der Booklibrary Beispielanwendung der WPF Application Framework ( WAF) . Es zeigt, wie die Validierung in WPF verwenden und wie die Schaltfläche Speichern steuern, wenn Validierungsfehler vorhanden ist.
Wenn Sie Ihre Business-Klasse direkt von Ihrem UI verwendet wird, ist preferrable IDataErrorInfo zu verwenden, da es Logik setzen näher an ihre Besitzer.
Wenn Sie Ihre Business-Klasse eine Stub-Klasse durch einen Verweis auf einen WCF / XmlWeb-Dienst erstellt, dann können Sie nicht / dürfen nicht IDataErrorInfo noch throw Exception für die Verwendung mit ExceptionValidationRule verwenden. Stattdessen können Sie:
- Verwenden Sie benutzerdefinierte ValidationRule.
- Definieren Sie eine partielle Klasse in WPF UI-Projekt und implementiert IDataErrorInfo.