Unterschied zwischen Model und ViewModel
Habe ich noch nie genutzt MVVM vor, also ich bin wahrscheinlich etwas fehlt offensichtlich. Wenn ich eine neue Panorama-Anwendung, es gibt bereits eine ViewModel-Ordner mit ItemViewModel und MainViewModel.
Dachte ich "MainViewModel.cs" ist die Datei, organisiert das panorama. Jedoch, innerhalb von MainViewModel, hat es diese Zeile:
public MainViewModel()
{
this.Items = new ObservableCollection<ItemViewModel>();
}
Den ItemViewModel hat keine Interaktion mit dem panorama. Diese sind dann instanziiert wie diese:
this.Items.Add(new ItemViewModel()
{
LineOne = "first line",
LineTwo = "second line",
LineThree = "third line"
});
Warum nicht ItemViewModel nur ein 'Modell'? Es INotifyPropertyChanged implementiert, aber für welchen Zweck? Ich hätte gedacht, dass die ObservableCollection in MainViewModel wäre genug, um Mitteilung über eventuelle änderungen, wie hier gezeigt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
ObservableCollection
benachrichtigt werden, wenn Elemente Hinzugefügt oder aus der Liste gelöscht, aber dieINotifyPropertyChanged
auf die ItemViewModel ist erforderlich, wenn Sie Benachrichtigungen zu geschehen, wenn sich diese Eigenschaften ändern.Model
?Unterschied ist ganz einfach.
Modell enthält die business-Logik.
View-Modell enthält eine Darstellung der Logik, und ist zusätzlich geformt, um fit Ansichten.
In Ihrem Fall - view-Modell implementiert
INotifyPropertyChanged
. Das ist Reine Präsentations-Logik.Modell ist nicht verantwortlich für die Benachrichtigung einer bestimmten UI-das hat sich etwas geändert, es ist verantwortlich für die übertragung von Rechnungen, die Berechnung der Löhne usw.
Manchmal (wenn das model ist einfach) diese Abstraktion zwar nicht notwendig ist.
Einige wiki Zitate:
Modell: wie in der klassischen MVC-pattern das Modell bezieht sich entweder
(a) ein Objekt-Modell für den realen Zustand Inhalt (ein objektorientierter Ansatz), oder
(b) die data-access-layer darstellt, dass die Inhalte (ein Daten-zentrischer Ansatz).
ViewModel: das ViewModel ist ein "Model der View", das heißt es ist ein Abstraktion der View, das dient auch in der Datenbindung zwischen der Ansicht und dem Modell. Es könnte gesehen werden als ein besonderer Aspekt von dem, was wäre ein Controller (im MVC-Muster), die fungiert als ein Daten-binder/- Konverter, die änderungen der Modell-Informationen in Anzeigen, Informationen und gibt Befehle aus der View in das Modell ein. Das ViewModel öffentlichen Eigenschaften, Befehle und Abstraktionen. Das ViewModel hat verglichen, um einen begrifflichen Zustand der Daten im Gegensatz zu den realen Zustand der Daten im Modell.
Es ist die gleiche Allgemeine Konzept hinter allen MV[x] - Architekturen, wenn auch MVC, MVP oder MVVM:
ObservableCollection
') und auch in Bezug auf die Benutzer-Präsentation (denken Sie z.B. über unterschiedliche Datum-Ordnungen oder unterschiedliche dezimal-Zeichen in verschiedenen Sprachen).In Ihrer einfachen Beispiel, könnte dies Aussehen wie overkill, sondern eine normale business-software haben Dutzende oder sogar Hunderte solcher MV[x] Triolen, und Sie würde keine Möglichkeit haben, pflegen eine saubere Architektur ohne diese.
Deine Frage zu beantworten: Was haben Sie in deinem Beispiel ist nur ein bisschen Verdrahtung code zum einrichten der beschriebenen Architektur.
HTH!
Thomas