Mam okno oparte na MVVM z wieloma kontrolkami, a mój Model implementuje IDataErrorInfo
.Jak wymusić aktualizację błędów sprawdzania poprawności w widoku z ViewModel przy użyciu obiektu IDataErrorInfo?
Istnieje również przycisk SaveCommand
, który przeprowadza walidację, analizując właściwość Model.Error
.
Widok wyświetla domyślny czerwone obramowanie wokół kontrolnych z błędami tylko przy zmianie wartości konkretnej kontroli, lub kiedy powiadomić o zmianie tej właściwości przy użyciu PropertyChanged.
Jak zmusić narzędzie View do wyświetlenia wszystkich błędów sprawdzania poprawności, nawet jeśli nie dotknąłem elementów sterujących?
Wszystkie moje powiązania sprawdzania poprawności obejmują ValidatesOnDataErrors=True, NotifyOnValidationError=True
.
Wiem, że jednym z rozwiązań jest posiadanie pola zbiorczego z wszystkimi błędami, ale wolałbym wyświetlać błędy na podstawie kontroli.
Nie chcę wyzwalać Model.NotifyPropertyChanged
dla każdej powiązanej właściwości z ViewModel.
Używam WPF 4.0, nie Silverlight, więc INotifyDataErrorInfo
nie będzie działać.
Dzięki za podpowiedź z PropertyChanged. Nie wiedziałem, że to możliwe. Znalazłem kolejną dyskusję na ten temat: http://stackoverflow.com/questions/1135012/wpf-mvvm-can-a-single-propertychanged-update-all-the-data-indings-of-a-datate if ktokolwiek jest zainteresowany. Jest to dobra odpowiedź, jeśli ktoś ma pojedynczy, prosty model viewModel.Mam jednak złożony widok z zagnieżdżonymi ViewModels, więc musiałbym napisać kod wywołujący PropertyChanged raz dla każdego zagnieżdżonego modelu/ViewModel, który implementuje INotifyPropertyChanged – surfen
Dobrze jest znać tę sztuczkę, jeśli chce się aktualizować tylko część widoku do określonego ViewModel – surfen
myControl.GetBindingExpression (ControlType.ControlProperty) .UpdateTarget(); faktycznie uzyskuje aktualność sprawdzania poprawności bez aktualizacji właściwości źródła. – r41n