MVVM-Muster, ViewModel DataContext-Frage

8

Ich muss herausfinden, wie man zwischen ViewModels kommuniziert. Ich bin neu in MVVM, also bitte sei nett.

Hier ist ein dumbed down Beispiel

Klassendefinitionen (angenommen, dass ich das Child.PropertyChanged-Ereignis im ParentViewModel angehängt habe):

%Vor%

Das sehen Sie im Ressourcenverzeichnis

%Vor%

und der Code-Behind der ChildView:

%Vor%

Das offensichtliche Problem besteht darin, dass wenn ChildView instanziiert wird (durch Auswahl aus dem DataTemplate), es eine neue ChildViewModel-Klasse erstellt und das ParentViewModel keinen Zugriff darauf hat.

Wie kann ich den DataContext der View als das ursprüngliche ViewModel instanziieren, das zur Auswahl der DataTemplate führte?

Eine naheliegende Lösung besteht darin, die Eigenschaften im ChildViewModel in das ParentViewModel einzufügen, aber ich würde es lieber zur Wiederverwendung trennen.

Ich bin mir sicher, dass die Antwort trivial ist, ich möchte nur wissen, was es ist. :)

Vielen Dank im Voraus.

    
Jose 05.05.2009, 16:34
quelle

3 Antworten

8

Sie sollten einfach die Zeile entfernen:

%Vor%

Der DataContext der Ansicht wird automatisch von WPF gesetzt. DataTemplates haben immer ihren Datenkontext auf die Daten für die Vorlage (in diesem Fall das ViewModel) eingestellt:

%Vor%

Das Endergebnis ist, dass Sie Ihre Ansichtsmodellobjekte separat erstellen können (sowohl die übergeordneten als auch die untergeordneten Klassen) und sie später anzeigen, indem Sie sie einfach in Inhaltssteuerelemente einfügen.

    
Josh G 05.05.2009, 16:42
quelle
5

Die einfachste Methode zur Kommunikation zwischen ViewModels mithilfe des MVVM-Ansatzes besteht in der Verwendung des Mediator-Musters (EventAggregator in Prism). Ein gutes Beispiel für diesen Ansatz kann in den folgenden Links gesehen werden:

  1. MVVM Mediator Muster von Sacha Barber
  2. MVVM + Mediator von marlon grech

Sehen Sie sich auch die MVVM sample Projektrahmen.

    
Soni Ali 06.05.2009 16:04
quelle
1

Nehmen wir an, Sie haben eine QueueView, die ein QueueViewModel verwendet.

%Vor%

- QueueView Teil

%Vor%     
Soni Ali 05.05.2009 20:12
quelle

Tags und Links