Durchführen Validierung auf einem Databound-Objekt, nachdem die Eigenschaft aktualisiert wurde
-
09-06-2019 - |
Frage
Ich habe eine Grundform mit den Kontrollen, die ein Objekt datengebundene setzt den INotifyPropertyChanged Schnittstelle. Ich möchte einige Validierung, um ein paar Eigenschaften hinzufügen, aber nicht wollen, gehen durch Umsetzung IDataErrorInfo im Interesse der ein paar Eigenschaften zu validieren.
Ich habe die Funktionen erstellt, die die Validierung und gibt die Fehlermeldung (falls zutreffend) in dem Objekt durchführen. Was ich möchte, ist tun, um diese Funktionen von meiner Form an, wenn die entsprechenden Eigenschaften für das Objekt geändert haben, und richten Sie die Errorprovider Kontrolle in meiner Form mit Fehlermeldungen, die von den Validierungsfunktionen zurückgegeben wurden .
Ich habe versucht, Event-Handler auf die Validierung und Lost-Focus-Ereignisse Einhaken, aber diese scheinen zu schießen, bevor mein Objekt aktualisiert wird, und daher sind sie die richtigen Daten nicht validiert werden. Es ist nur, wenn ich die Textbox verlassen, gehen Sie zurück in und dann wieder verlassen, dass die Validierung läuft gegen die korrekten Daten.
Gibt es ein anderes Ereignis, das ich in Haken kann, so dass ich diese Validierungsfunktionen aufrufen können, nachdem die Eigenschaft auf mein Objekt aktualisiert wurde? Oder bin ich besser dran, nur die Umsetzung der IDataErrorInfo Schnittstelle?
Lösung
Ich bin mir nicht sicher, was genau das Problem ist, sagen Sie, dass Sie nicht die Eigenschaft festlegen erhalten kann, bis das Steuerelement den Fokus verliert?
Wenn ja, müssen Sie die Bindung setzen OnPropertyChanged
statt OnValidation
zu aktualisieren.
Die Bindung OnPropertyChanged
bedeutet die Bindung sofort aktualisiert wird, während OnValidation
nur das zugrunde liegende Objekt aktualisiert, wenn eine Validierung ausgelöst wird (was für die meisten Kontrollen ist, wenn sie den Fokus verlieren).
Andere Tipps
Ich glaube, ich habe eine Lösung für das Problem mit Hilfe von Camerons Beitrag gefunden. Ich habe die Bindung zu aktualisieren OnPropertyChanged geändert und wenn ich jetzt die Event-Handler zum Lostfocus-Ereignisse verdrahten die Validierung auf den „neuen“ Wert aus der Textbox durchgeführt wird und nicht als das, was vorher in dem Objekt statt