| 

.NET C# Java Javascript Exception

6
Hallo,
ich würde gerne wissen wie man 2 Viewmodel Klassen miteinander "verbindet".
Beispiel:
WindowMain -> MainVM
WindowDetail -> DetailVM

Aus WindowMain wird nun das WindowDetail geöffnet. Beim Ausführem einer bestimmten Methode(im DetailVM) soll das WindowMain, also die MainVM, darüber informiert werden.

Man könnte natürlich jetzt die DetailVM als Eigenschaft der MainVM anlegen, aber ich denke mal das ist nicht Sinn der Sache.
Soll man sowas überhaupt machen?

Grüße
David
08.10.2011
david 363 5
3 Antworten
3
Hallo David,

wenn Du das MVVM Pattern einsetzt, brauchst Du ja ein Reihe von Helper-Klassen, weil Silverlight/WPF zwar den Einsatz von MVVM nahelegt, jedoch nicht alles, was man benötigt, an Bord hat.
Das Prinzip hinter MVVM besteht ja in der 'losen' Kopplung von Model, View und ViewModel, die man je nach Bedarf austauschen kann.
Die Kommunikation zwischen den VMs kann, wie Tachyon bereits geschrieben hat, über das Mediator Pattern erfolgen, was dann zu einem Messenger (MVVM light Toolkit) oder EventAggregator (PRISM) führt.
Die VM meldet sich beim zentralen System an und bekommt dann die entsprechenden Nachrichten zugeschickt.
Eine Kommunikation kann natürlich auch über einen gemeinsamen Business Service erfolgen. Setzt man z.B PRISM ein, so wird das System in unabhängige Module unterteilt. In jedem Modul kann es auch mehrere VMs geben, die dann (über DI) den selbe 'DataService' instanzieren und diesen auch zum Austausch nutzen können.

Apropos PRISM: IMO sollte man nicht sein eigenes MVVM Framework basteln. Neben PRISM als Ur-Vater alle MVVM Frameworks gibt es auch nette kleine Implementierungen wie z.B das MVVM Light Toolkit, das Dir die Entwicklung mit MVVM erheblich erleichtert.

Gruß
Dirk
09.10.2011
judgy 721 6
2
Hey,

ich verwende dafür das Mediator-Pattern.

Siehe hier für eine Beispielimplementierung.


Gruß,
Tachyon
08.10.2011
Tachyon 690 6
0
Vielen Dank für die Antworten. ich habe mir das MVVM light Toolkit jetzt mal kurz angeschaut und habe gleich mal eine weitere Frage ob ich das richtig verstanden habe.
Beispiel:
3 ViewModel Klassen.
MainVM
Detail_1_VM
Detail_2_VM

die MainVM soll auf bestimmte "Aktionen" der beiden Detail VMs reagieren.
mein Vorgehen wäre:
MainVM: Messenger -> Register
DetailVMs: Messenger -> Send

Wäre dass so sinngemäß?

Grüße
David
12.10.2011
david 363 5
1
Ja, das wäre eine Möglichkeit.
judgy 12.10.2011

Stelle deine .net-Frage jetzt!