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?
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.
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