Cóż, myślę, że mam dość dobrą znajomość MVVM. Ale potrzebuję pewnych wyjaśnień.MVVM, WPF i walidacja
Czy ViewModel jest odpowiedzialny za wywoływanie odpowiedniej usługi w celu utrwalenia informacji o modelu?
Jeśli tak, to ViewModel musi mieć czysty sposób określania, czy posiadane dane są poprawne. Jeśli dane są prawidłowe, odpowiednio zaktualizuje model. Ostatecznie, usługa do utrzymywania Modelu jest wywoływana z uwagi na nowo zaktualizowany model. Następnie pytanie brzmi: w jaki sposób możemy sprawdzić informacje ViewModel i wyświetlić to łatwo w widoku?
Widziałem kilka różnych podejść do sprawdzania poprawności. Jeden sugeruje użycie IDataErrorInfo, co moim zdaniem jest absolutnie obrzydliwe.
Innym jest dodanie ValidationRule do Binding.ValidationRules. Jednak przy użyciu tego podejścia nie można działać w kontekście modelu jako całości. Obiekt ValidationRule może wykonywać walidację tylko na pojedynczej wartości. Przykładem może być zapewnienie, że wartość jest liczbą całkowitą lub w pewnym zakresie.
Inną ideą, którą właśnie zacząłem analizować, jest użycie BindingGroup. Ale w tej chwili nie wiem zbyt wiele na ten temat, ponieważ wciąż go czytam.
Chciałbym móc wykonywać logikę walidacji w jednym miejscu do użycia przez View i ViewModel. Oprócz tego wymogu, chciałbym być w stanie wykonać walidacje z dowolną inną wartością w ViewModel. Ponadto jest w stanie uniemożliwić ViewModel utrwalanie danych, jeśli jest on nieprawidłowy. To musi być łatwo odzwierciedlone w widoku.
Jeśli ktoś może wskazać mi jakieś artykuły lub przedstawić pewien wgląd w moje pożądane podejście, byłbym bardzo wdzięczny.
Ciekawe, dlaczego uważasz, że IDataErrorInfo jest obrzydliwe? –
Myślę, że to niewłaściwe użycie indeksera, aby rozpocząć. ViewModel ["Nazwa"] powinien zwrócić nazwę ... nie null/"błąd!". Ograniczasz się także do właściwości, które zostały powiązane w widoku. Nie nadaje się on dobrze do walidatorów, takich jak ValidateNameInformation, gdzie może sprawdzać wszystkie pola. Jeśli jestem źle zrozumiany w tych wypowiedziach, popraw mnie. – Joe
Jednym ze sposobów, w jaki dostaję się na temat nadużycia indeksującego, jest użycie jawnej implementacji interfejsu. W ten sposób nie mam dziwnego "narzędzia indeksującego" zaśmiecającego mój publiczny interfejs ViewModel. Nadal pracuję nad sprawdzaniem poprawności wielu pól przy użyciu MVVM. –