Im MVVM-Modell sollte das Modell die INotifyPropertyChanged-Schnittstelle implementieren?
Ich habe klare Vorstellung über View
und ViewModel
im MVVM-Muster. Ich bin der Planung und Implementierung von MVVM-pattern in meiner Anwendung. Ich bin vor ein Problem in Bezug auf das Modell. Ich habe .xml-Datei wird geparst und die Informationen in der Ansicht angezeigt.
Muss ich benachrichtigt werden über die änderungen in der Modell für die erste Zeit nur. Von ab-on-demand, die ich brauche, um benachrichtigt zu werden.
So, wie die Umsetzung des Modells?
Sollte ich implementieren INotifyPropertyChanged
Schnittstelle im model-Klasse auch? (Ich habe gelesen, dass Modell sollte nicht umsetzen INotifyPropertyChanged
- Schnittstelle, da es die WPF-spezifischen)
InformationsquelleAutor der Frage Syed | 2011-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Umsetzung
INotifyPropertyChanged
Modelle ist völlig akzeptabel -Obwohl seine bis zu Ihnen zu entscheiden, ob Sie wollen, dass diese Art der Umsetzung ist oder nicht, aber denken Sie daran -
Entnommen - http://msdn.microsoft.com/en-us/library/gg405484(PandP.40).aspx
Habe ich in einige Projekte, bei denen wir noch nicht umgesetzt
INotifyPropertyChanged
in unsere Modelle und aufgrund dieser standen wir vor einer Menge Probleme; unnötige überschneidungen von Eigenschaften, die nötig war, in der VM und in der gleichen Zeit hatten wir aktualisieren die zugrunde liegenden Objekts(mit aktualisierten Werten) vor der übergabe an BL/DL.Sie werden Probleme haben, speziell wenn Sie brauchen, um die Arbeit mit der Sammlung der model-Objekte(sagen wir in einem editierbaren raster oder Liste) oder komplexen Modellen; - Modell-Objekte werden nicht automatisch aktualisiert und Sie haben zu verwalten, alles, was in der VM.
InformationsquelleAutor der Antwort akjoshi
Standard MVVM-Ansatz ist die Implementierung
INotifyPropertyChanged
nur auf das ViewModel. Der Zweck ist, aktualisieren Sie die entsprechenden Bindungen auf der Ansicht, wenn etwas änderungen im ViewModel.Jedoch, diese Ziele änderungen an das ViewModel von der Ansicht. Das heißt, wenn Sie den Wert ändern in einem
TextBox
dieINotifyPropertyChanged
Umsetzung auf das ViewModel wird, aktualisieren Sie die zugehörigen Bindungen, so ist die Ansicht richtig aktualisiert.Tut es nicht Abdeckung änderungen an dem Modell durch eine externe Quelle, wie änderungen an der Datenbank oder eine andere Schnittstelle. Solange alle Daten, die änderungen kommen aus dem View, ViewModel sollte sich bewusst sein, alle änderungen und wissen, was zu aktualisieren. Zum Beispiel, wenn Sie wissen, dass das ändern der variable
Foo
am Modell, ändert sich auch der Wert derBar
auf Ihr Modell, es wäre klug, rufen beideOnPropertyChanged(Foo)
undOnPropertyChanged(Bar)
in der ViewModel, wenn Sie ändern Sie den Wert vonFoo
.Die andere alternative ist, die Ereignisse zwischen Model und ViewModel zu aktualisieren, die Werte auf dem ViewModel, dass die aktualisiert werden müssen. Wenn, wie du sagst, die Benachrichtigung ist erforderlich, "nur beim ersten mal", dann ist die Umsetzung eine manuelle einmal-refresh auf einige trigger sollte auch funktionieren.
InformationsquelleAutor der Antwort Pieter Müller
Dies ist sehr häufiges problem während der Arbeit mit MVVM,
INotifyPropertyChanged
ist nicht WPF-spezifische, wie es ist TeilSystem.ComponentModel
so dass keine Notwendigkeit zum hinzufügen jede WPF-spezifische Referenz in Sie Lösung.Wenn Sie implementieren
INofityPropertyChanged
im Sie Modell speichern können, viel mehr code im ViewModel(Proxy-Eigenschaften). So ist es akzeptabel, zu ModellINotifyPropertyChanged
.InformationsquelleAutor der Antwort Firoz
Manchmal ist es akzeptabel, um das Modell umzusetzen, das
INotifyPropertyChanged
- Schnittstelle.Zum Beispiel, wenn das Modell hat eine Menge von Eigenschaften visualisiert werden, und Sie möchten vermeiden, implementieren eine Menge von code (proxy-Eigenschaften) im viewmodel für die Aufdeckung solcher Modell-Eigenschaften.
Blick auf http://msdn.microsoft.com/en-us/magazine/ff798279.aspx
InformationsquelleAutor der Antwort Klaus78
Dies ist ein klassisches argument, zwischen dem "reinen" MVVM-Programmierer und andere.
Ich Neige dazu, gehen durch die Bücher, Wann immer ich kann, weil die meisten der Zeit, die Sinn macht. Jedoch, in bestimmten Situationen improvisieren Sie den code entsprechend den Anforderungen reduzieren eine Menge von doppelten code.
In Ihrem Fall, können Sie Lesen Sie die XML-Daten in eine model-Klasse und eine Kopie der model-Klasse viewmodel, oder kopieren Sie die Eigenschaften, die Sie wollen aus dem Modell an den view-Modell. Auf diese Weise haben Sie die Kontrolle für die Aktualisierung der UI/Modell. Wenn Sie Folgen dem ersten Ansatz, den Sie haben müssen, Inotifypropertychanged implemetned in Ihrem Modell Klasse, und es ist akzeptabel.
Gesagt, dass ich versuchen würde, mein Niveau am besten zu Folgen, der zweite Ansatz, denn das würde mir genaue Kontrolle über alle Eigenschaften, die angezeigt wird/manipuliert in den Blick. Auch wird, fühle ich mich viel besser, ich bin nicht gegen das MVVM-Muster.
InformationsquelleAutor der Antwort Jimmy
Ich bin mir nicht sicher, was du meinst. In der VM können Sie entweder die
INotifyPropertyChanged
oder DependencyProperty-es (in diesem Fall die VM muss eine Ableitung vonDependencyObject
). Keinen Sinn machen, dass beide. Auch nicht sinnvoll ist, dass keiner von Ihnen.In das Modell, Sie können tun, was Sie wollen. Die Fähigkeit, Feuer/empfangen von Ereignissen ist gut, aber nicht immer kann man sich auf Sie verlassen. Im Grunde das Modell ist abhängig von der Quell-Daten und verwandten Materialien, während das viewmodel hat die Last der Schnittstelle das Modell mit der Präsentations-Schicht. Da WPF arbeitet auf Ereignisse, mindestens der VM muss einige Benachrichtigungs-Mechanismus.
InformationsquelleAutor der Antwort Mario Vernari