Ich bin mit dem Konzept, dass das Modell das nicht implementieren sollte, überhaupt nicht einverstanden INotifyPropertyChanged
. Diese Schnittstelle ist nicht UI-spezifisch! Es informiert einfach über eine Änderung. In der Tat verwendet WPF dies häufig, um Änderungen zu identifizieren. Dies bedeutet jedoch nicht, dass es sich um eine Benutzeroberfläche handelt. Ich würde es mit dem folgenden Kommentar vergleichen: " Ein Reifen ist ein Autozubehör ". Sicher ist es das, aber Fahrräder, Busse usw. benutzen es auch. Zusammenfassend gesagt, nehmen Sie diese Schnittstelle nicht als UI-Sache.
Dies bedeutet jedoch nicht unbedingt, dass ich glaube, dass das Modell Benachrichtigungen bereitstellen sollte. Als Faustregel sollte das Modell diese Schnittstelle nur implementieren, wenn dies erforderlich ist. In den meisten Fällen, in denen keine Serverdaten an die Client-App übertragen werden, kann das Modell veraltet sein. Aber wenn ich Finanzmarktdaten abhöre, sehe ich nicht, warum das Modell die Schnittstelle nicht implementieren kann. Was ist beispielsweise, wenn ich eine Nicht-UI-Logik wie einen Service habe, der beim Empfang eines Bid- oder Ask-Preises für einen bestimmten Wert eine Warnung ausgibt (z. B. per E-Mail) oder eine Bestellung aufgibt? Dies könnte eine mögliche saubere Lösung sein.
Es gibt jedoch verschiedene Wege, um Dinge zu erreichen, aber ich würde immer für Einfachheit eintreten und Redundanz vermeiden.
Was ist besser? Definieren von Ereignissen in einer Sammlung oder von Eigenschaftsänderungen im Ansichtsmodell und Weitergeben an das Modell oder Aktualisieren des Modells durch die Ansicht (über das Ansichtsmodell)?
Wenn Sie jemanden sehen, der behauptet, " Sie können dies oder das nicht ", ist dies ein Zeichen dafür, dass er nicht weiß, wovon er spricht.
Es hängt wirklich von Ihrem Fall ab und tatsächlich ist MVVM ein Framework mit vielen Problemen, und ich muss noch eine gemeinsame Implementierung von MVVM auf der ganzen Linie sehen.
Ich wünschte, ich hätte mehr Zeit, um die vielen Varianten von MVVM und einige Lösungen für häufig auftretende Probleme zu erklären - meistens von anderen Entwicklern, aber ich denke, ich muss es ein anderes Mal tun.