Ich habe ein MVVM-basiertes Fenster mit vielen Steuerelementen und mein Modell implementiert IDataErrorInfo
.Wie erzwinge Validierungsfehler Update auf Ansicht von ViewModel mit IDataErrorInfo?
Es gibt auch eine SaveCommand
Schaltfläche, die die Validierung durch Analyse der Model.Error
Eigenschaft durchführt.
Die Ansicht zeigt den standardmäßigen roten Rahmen um Steuerelemente mit Fehlern nur, wenn ich den Wert eines bestimmten Steuerelements ändern, oder wenn ich über die Änderung dieser Eigenschaft mit PropertyChanged benachrichtigen.
Wie kann ich View erzwingen, um alle Validierungsfehler anzuzeigen, auch wenn ich die Steuerelemente nicht berührt habe?
Alle meine Validierungsbindungen sind ValidatesOnDataErrors=True, NotifyOnValidationError=True
.
Ich weiß eine Lösung ist, eine Sammelkiste mit allen Fehlern zu haben, aber ich würde es vorziehen, Fehler pro Kontrolle zu zeigen.
Ich möchte Model.NotifyPropertyChanged
für jede gebundene Eigenschaft von ViewModel nicht auslösen.
Ich benutze WPF 4.0, nicht Silverlight, so INotifyDataErrorInfo
wird nicht funktionieren.
Danke für den Trick mit PropertyChanged. Ich wusste nicht, dass es möglich ist. Ich habe eine andere Diskussion zu diesem Thema gefunden: http://stackoverflow.com/questions/1135012/wpf-mvvm-can-a-single-propertychanged-update-all-the-data-bindings-of-a-datate wenn Jeder ist interessiert. Dies ist eine gute Antwort, wenn jemand ein einzelnes, einfaches viewModel hat.Allerdings habe ich eine komplexe Ansicht mit verschachtelten ViewModels, also müsste ich Code schreiben, um PropertyChanged einmal für jedes geschachtelte gebundene Model/ViewModel aufzurufen, das INotifyPropertyChanged implementiert. – surfen
Es ist gut diesen Trick zu kennen, wenn man nur einen Teil der View aktualisieren will zu einem bestimmten ViewModel – surfen
myControl.GetBindingExpression (ControlType.ControlProperty) .UpdateTarget(); Aktualisiert Ihre Validierung tatsächlich, ohne Ihre Quelleigenschaft zu aktualisieren. – r41n