Ich habe MVVM noch nie zuvor benutzt, also vermisse ich wahrscheinlich etwas Offensichtliches. Wenn ich eine neue Panorama-Anwendung erstelle, gibt es bereits einen ViewModel-Ordner mit ItemViewModel und MainViewModel.
Ich dachte "MainViewModel.cs" ist die Datei, die das Panorama organisiert. In MainViewModel hat es jedoch folgende Zeile:
%Vor%Das ItemViewModel hat keine Interaktion mit dem Panorama. Diese sind dann so instanziiert:
%Vor%Warum ist ItemViewModel nicht einfach ein 'Model'? Es implementiert INotifyPropertyChanged, aber zu welchem Zweck? Ich hätte gedacht, dass die ObservableCollection in MainViewModel ausreichen würde, um alle Änderungen zu melden, wie hier demonstriert
Danke
Der Unterschied ist ziemlich einfach.
Modell enthält Geschäftslogik.
Das Ansichtsmodell enthält eine Darstellungslogik und ist zusätzlich so gestaltet, dass es Ansichten entspricht.
In Ihrem Fall - Modell anzeigen implementiert INotifyPropertyChanged
. Das ist reine Präsentationslogik.
Model ist nicht dafür verantwortlich, eine bestimmte Benutzeroberfläche zu benachrichtigen, dass sich etwas geändert hat, es ist verantwortlich für die Übertragung von Rechnungen, die Berechnung von Löhnen usw.
Manchmal (wenn das Modell einfach ist) ist diese Abstraktion jedoch nicht notwendig.
Einige Wiki Zitate:
Modell : Wie im klassischen MVC-Muster bezieht sich das Modell entweder auf
(a) ein Objektmodell, das den Realzustandsinhalt darstellt (ein objektorientierter Ansatz) oder
(b) die Datenzugriffsebene, die diesen Inhalt darstellt (ein datenzentrierter Ansatz).
ViewModel : Das ViewModel ist ein "Modell der Ansicht", dh es ist eine Abstraktion der Ansicht , die auch bei der Datenbindung zwischen der Ansicht und dem Modell dient. Es könnte als ein spezieller Aspekt eines Controllers (im MVC-Muster) betrachtet werden, der als Datenbinder / Konverter fungiert, der Modellinformationen in Ansichtsinformationen ändert und Befehle von der Ansicht in das Modell übergibt. Das ViewModel macht öffentliche Eigenschaften, Befehle und Abstraktionen verfügbar. Das ViewModel wurde mit einem konzeptionellen Status der Daten verglichen mit dem tatsächlichen Status der Daten im Modell verglichen.
Es ist das gleiche allgemeine Konzept hinter allen MV [x] Architekturen, wenn auch MVC, MVP oder MVVM:
ObservableCollection
binden') als auch in Bezug auf die Benutzerpräsentation (denken Sie zB über unterschiedliche Datumsreihenfolgen oder unterschiedliche Dezimalstellen) Zeichen in verschiedenen Sprachen). In Ihrem einfachen Beispiel sieht das vielleicht nach einem Overkill aus, aber eine normale Business-Software wird Dutzende oder sogar Hunderte solcher MV [x] -Triplets enthalten, und Sie hätten keine Möglichkeit, eine saubere Architektur ohne diese aufrechtzuerhalten.
>Um Ihre Frage zu beantworten: Was Sie in Ihrem Beispiel haben, ist nur ein bisschen Verdrahtungscode, um die beschriebene Architektur einzurichten.
HTH! Thomas
Tags und Links c# silverlight mvvm windows-phone-7