it-swarm-eu.dev

Bewährte Methoden für die Bindung und Validierung von WPF-Daten

Ich habe eine sehr einfache WPF-Anwendung, in der ich Datenbindung verwende, um die Bearbeitung einiger benutzerdefinierter CLR-Objekte zu ermöglichen. Ich möchte jetzt etwas Eingabevalidierung einsetzen, wenn der Benutzer auf Speichern klickt. Alle WPF-Bücher, die ich gelesen habe, widmen diesem Thema jedoch keinen Platz. Ich sehe, dass Sie benutzerdefinierte Validierungsregeln erstellen können, aber ich frage mich, ob dies für meine Bedürfnisse übertrieben wäre.

Meine Frage lautet also: Gibt es irgendwo eine gute Beispielanwendung oder einen guten Artikel, der bewährte Methoden für die Validierung von Benutzereingaben in WPF demonstriert?

100
Mark Heath

Ich denke, der neue bevorzugte Weg könnte sein, IDataErrorInfo zu verwenden

Lesen Sie mehr hier

83
rudigrobler

Aus der MS Patterns & Practices-Dokumentation :

Datenvalidierung und Fehlerberichterstattung

Ihr Ansichtsmodell oder Modell muss häufig eine Datenvalidierung durchführen und alle Datenvalidierungsfehler an die Ansicht melden, damit der Benutzer sie korrigieren kann.

Silverlight und WPF bieten Unterstützung für die Verwaltung von Datenüberprüfungsfehlern, die beim Ändern einzelner Eigenschaften auftreten, die an Steuerelemente in der Ansicht gebunden sind. Bei einzelnen Eigenschaften, die an ein Steuerelement datengebunden sind, kann das Ansichtsmodell oder -modell einen Datenüberprüfungsfehler innerhalb des Eigenschafteneinstellers signalisieren, indem ein eingehender ungültiger Wert zurückgewiesen und eine Ausnahme ausgelöst wird. Wenn die ValidatesOnExceptions-Eigenschaft für die Datenbindung true ist, behandelt das Datenbindungsmodul in WPF und Silverlight die Ausnahme und zeigt dem Benutzer visuell an, dass ein Datenvalidierungsfehler vorliegt.

Das Auslösen von Ausnahmen mit solchen Eigenschaften sollte jedoch nach Möglichkeit vermieden werden. Ein alternativer Ansatz besteht darin, die Schnittstellen IDataErrorInfo oder INotifyDataErrorInfo in Ihrem Ansichtsmodell oder Ihren Modellklassen zu implementieren. Über diese Schnittstellen kann Ihr Ansichtsmodell oder Modell eine Datenüberprüfung für einen oder mehrere Eigenschaftswerte durchführen und eine Fehlermeldung an die Ansicht zurückgeben, damit der Benutzer über den Fehler benachrichtigt werden kann.

In der Dokumentation wird die Implementierung von IDataErrorInfo und INotifyDataErrorInfo erläutert.

23
Pat

persönlich verwende ich Ausnahmen, um die Validierung zu behandeln. Es erfordert folgende Schritte:

  1. in Ihrem Datenbindungsausdruck müssen Sie "ValidatesOnException = True" hinzufügen.
  2. in Ihrem Datenobjekt, an das Sie binden, müssen Sie den DependencyPropertyChanged-Handler hinzufügen, mit dem Sie überprüfen, ob der neue Wert Ihre Bedingungen erfüllt. Wenn nicht, stellen Sie den alten Wert des Objekts wieder her (falls erforderlich) und lösen eine Ausnahme aus.
  3. in Ihrer Steuerelementvorlage, die Sie zum Anzeigen ungültiger Werte im Steuerelement verwenden, können Sie auf die Fehlererfassung zugreifen und eine Ausnahmemeldung anzeigen.

der Trick dabei ist, nur an Objekte zu binden, die von DependencyObject abgeleitet sind. Eine einfache Implementierung von INotifyPropertyChanged würde nicht funktionieren - es gibt einen Fehler im Framework, der den Zugriff auf die Fehlersammlung verhindert.

10
Greg

Überprüfen Sie auch dieser Artikel . Angeblich hat Microsoft sein Enterprise Library (v4.0) von seinen Mustern und Vorgehensweisen veröffentlicht, in denen das Thema Validierung behandelt wird, aber Gott weiß, warum sie keine Validierung für WPF aufgenommen haben Sie erklären, was der Autor getan hat, um es anzupassen. Hoffe das hilft!

3
murki

Sie könnten an der BookLibrary Beispielanwendung des WPF Application Framework (WAF) interessiert sein = . Es wird gezeigt, wie die Validierung in WPF verwendet wird und wie die Schaltfläche Speichern gesteuert wird, wenn Validierungsfehler vorliegen.

2
jbe

Wenn Ihre Business Class direkt von Ihrer Benutzeroberfläche verwendet wird, ist es vorzuziehen, IDataErrorInfo zu verwenden, da dadurch die Logik näher an den Eigentümer gebracht wird.

Wenn Ihre Geschäftsklasse eine Stub-Klasse ist, die durch einen Verweis auf einen WCF/XmlWeb-Dienst erstellt wurde, können/dürfen Sie weder IDataErrorInfo verwenden noch Exception zur Verwendung mit ExceptionValidationRule auslösen. Stattdessen können Sie:

  • Verwenden Sie eine benutzerdefinierte Validierungsregel.
  • Definieren Sie eine Teilklasse in Ihrem WPF-UI-Projekt und implementieren Sie IDataErrorInfo.
0
Alex Pollan