2011-01-17 3 views
6

Nehmen wir an, ich habe ein Programm, das einige Daten in zwei verschiedenen Möglichkeiten darstellen muss. Wenn ich dies mit zwei verschiedenen ViewModels erreichen möchte, scheint es, als ob sie beide die gleiche Instanz des Model-Objekts teilen sollten. Also Wie wird dies in MVVM mit WPF im Allgemeinen erreicht?Wie wird ein Modell normalerweise zwischen ViewModel-Objekten freigegeben?

Eine Möglichkeit, die ich denken kann ist, dass das Ansichtsmodell Konstrukteure eine Instanz des entsprechenden Modells nehmen könnte und alle Kabel in einem Handler für das Application.Startup Ereignis getan werden könnten. Ich kann mich nicht erinnern, das in einem der Beispiele gesehen zu haben, die ich bisher gesehen habe, aber ich habe es vielleicht gerade verpasst.

Bisher scheint es, wie die meiste Zeit, zeigen die Beispiele nur die Viewmodel Erstellen von Instanzen der Modellklassen selbst, die in einigen Fällen funktionieren konnte, aber scheint nicht wie eine gute Lösung für meine Situation, da Jede ViewModel würde eigene Instanzen von Model-Klassen erstellen. Es scheint auch wie das würde die Möglichkeit des Ersetzens des Modells mit einem anderen , die möglicherweise gewünscht werden, wie im Fall der Komponententests zu beseitigen. Ich bin raten, dass ein Abhängigkeits-Injection-Framework oder IoC-Container würde dieses Problem zu beseitigen? Ich habe bisher nur manuelle Abhängigkeitsinjektionen verwendet.

In einem anderen Beispiel schien es wie die Ansicht der Modell-Objekte selbst erstellt und übergeben sie an die Viewmodels, die wie eine so große Idee entweder scheint nicht, da die Ansicht sollte nichts über das Modell kennen ?

Einige Beispiele scheinen nicht einmal Model-Klassen zu haben, nur Views und ViewModels.

Gibt es bessere Möglichkeiten, die ich nicht erwähnt habe?

Zusätzlich, sollte ich ein Dependency-Injection-Framework oder IoC-Container verwenden? Wie bereits erwähnt, habe ich vorher noch keins benutzt und ich dachte, es könnte Overkill für die Größe der Programme sein, an denen ich gerade arbeite. Haben nicht wirklich sehr schwer in irgendeinen Blick hineingeschaut, ich könnte mich irren.

Antwort

2

Der allgemeine Ansatz besteht darin, ein Modell in Konstruktor eines Ansichtsmodells zu übergeben. Wahrscheinlich zeigen die Beispiele, die Sie angeschaut haben, dies nicht der Einfachheit halber. Wenn Sie also zwei Ansichtsmodelle verwenden, die mit denselben Daten (Modell) arbeiten, verwenden Sie in beiden dieselbe Instanz des Modells.

Wie für Dependency-Injektion und IoC-Container, wie Sie sagten, es ist Overkill für kleine Projekte, aber wenn Sie Projekt groß wird, könnte es Ihnen eine Menge Nutzen bringen.

+3

In Ordnung, aber wie wird das normalerweise gemacht? Welche Klasse erstellt normalerweise die Instanz des Model-Objekts und übergibt sie an die entsprechenden ViewModel-Objekte? Das ist die Hauptsache, über die ich im Moment verwirrt bin. – foven

-1

Sie müssen das Modell teilen: Wenn Sie möchten, dass Ihre Daten in der Benutzeroberfläche über INotifyPropertyChanged aktualisiert werden - das ist eine der wichtigsten Ideen von MVVM - sollten Sie das Modell teilen (zumindest den entsprechenden Port für ein bestimmtes ViewModel) zwischen ViewModels.

+1

Danke für die Antwort.Ich weiß bereits, dass ich das Modell teilen muss, worüber ich verwirrt bin, ist, was die besten Optionen für das tatsächliche Management sind. Mit anderen Worten, es gibt wahrscheinlich verschiedene Möglichkeiten, dieselbe Instanz des Modells für verschiedene ViewModel-Objekte bereitzustellen. Ich würde gerne wissen, was die typischen Wege sind, dies zu erreichen und wann jedes angemessen ist, Vor- und Nachteile jeder Vorgehensweise usw. – foven

0

Sie können ein anwendungsweites Modell als Singleton/Statische Klasse festlegen. Dann wird dieselbe Instanz standardmäßig gemeinsam verwendet.

Verwandte Themen