Zdecydowanie nie zgadzam się z koncepcją, że Model nie powinien implementować INotifyPropertyChanged
. Ten interfejs nie jest specyficzny dla interfejsu użytkownika! Po prostu informuje o zmianie. Rzeczywiście, WPF intensywnie wykorzystuje to do identyfikowania zmian, ale to nie znaczy, że jest to interfejs interfejsu użytkownika. Porównałbym to do komentarza: „ Opona to akcesorium samochodowe ”. Jasne, ale korzystają z niego także rowery, autobusy itp. Podsumowując, nie traktuj tego interfejsu jako elementu interfejsu użytkownika.
Powiedziawszy to, niekoniecznie oznacza to, że uważam, że Model powinien dostarczać powiadomienia. W rzeczywistości model nie powinien implementować tego interfejsu, chyba że jest to konieczne. W większości przypadków, gdy żadne dane serwera nie są przekazywane do aplikacji klienckiej, model może być nieaktualny. Ale słuchając danych z rynków finansowych, to nie widzę, dlaczego model nie może zaimplementować interfejsu. Na przykład, co zrobić, jeśli mam logikę inną niż UI, taką jak usługa, która po otrzymaniu ceny kupna lub sprzedaży dla danej wartości generuje alert (np. Za pośrednictwem wiadomości e-mail) lub składa zamówienie? Może to być możliwe czyste rozwiązanie.
Istnieją jednak różne sposoby osiągnięcia pewnych rzeczy, ale zawsze opowiadałbym się za prostotą i unikaniem nadmiarowości.
Co jest lepsze? Definiowanie zdarzeń w kolekcji lub zmian właściwości w modelu widoku i propagowanie ich do modelu lub sprawienie, aby widok wewnętrznie aktualizował model (za pośrednictwem modelu widoku)?
Podsumowując, ilekroć zobaczysz kogoś, kto twierdzi, że „ nie możesz zrobić tego lub tamtego ”, jest to znak, że nie wie, o czym mówi.
To naprawdę zależy od twojego przypadku i tak naprawdę MVVM to framework z wieloma problemami i nie widzę jeszcze wspólnej implementacji MVVM we wszystkich dziedzinach.
Chciałbym mieć więcej czasu na wyjaśnienie wielu odmian MVVM i kilku rozwiązań typowych problemów - w większości dostarczonych przez innych programistów, ale myślę, że będę musiał to zrobić innym razem.