Kommunizieren mit zwei view-Modelle in WPF, MVVM
Ich entwickle eine WPF-Anwendung ich habe einige Probleme zu kommunizieren, einen Blick Modell mit einem anderen.
Habe ich:
- MainViewModel
- ChildViewModel1
- ChildViewModel2
Jedes mal, wenn sich eine Eigenschaft ändert, die im MainViewModel, ChildViewModel1 und ChildViewModel2 sollten benachrichtigt werden.
Kann jeder jeden schlagen einen workaround?
BEARBEITEN:
Ich bin am überlegen in eine Lösung descrided MVVM Light (http://simplemvvmtoolkit.codeplex.com/SourceControl/changeset/view/23821#313594.), ist die Implementierung eines message-bus. Ist es der richtige Ansatz?
- Viel zu allgemein. Sie müssen versuchen, diese auf Ihrem eigenen. Siehe INotifyPropertyChanged
- Der Titel dieses ist irreführend und es gibt nicht eine spezifische Frage.
- Ich weiß nicht, über andere MVVM-frameworks, aber MVVM Light und ReactiveUI gehören Nachrichten-bus-Implementierungen wie bereits erwähnt, in Ihrem Titel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
den gemeinsamen Weg für viewmodels zur Kommunikation untereinander
ist die Umsetzung der theMediator design pattern
hier ist, wie es ist getan in MVVMLight
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27aaefff-e463-451c-87d9-37367a343e0e
in der PRISMA ist:
http://blogs.u2u.be/diederik/post/2011/01/15/Using-the-Prism-40-Event-Aggregator.aspx
in Caliburn ist:
http://www.mindscapehq.com/blog/index.php/2012/02/01/caliburn-micro-part-4-the-event-aggregator/
In den meisten Fällen würde ich NICHT vorschlagen, mit einem zentralisierten Platz zu teilen "Veranstaltungen"/"Benachrichtigungen", wie EventAggregator, etc.. Dies führt zu späteren Problemen im Zusammenhang mit nicht klar, die Beziehungen zwischen ViewModels. Solche Meldungen macht es Sinn, in ganz bestimmten Fällen, wenn die Beziehungen zwischen Hörer/publisher ist nicht bekannt, auch auf der design-Bühne.
Ich würde vorschlagen, zeichnen Sie einfache Diagramm mit den Beziehungen zwischen ViewModels und einen Weg finden, der standard .NET Ereignisse, so, wenn Sie klare realtionships zwischen ViewModels wie ViewModel1 hat einen Verweis auf ViewModel2 so abonnieren kann, um ein Ereignis oder eine eigene callback, so dass es leicht sein wird zu bauen, wie Ereignisbenachrichtigungen.
Ich mit einem IService implementiert ist, die von jedem view-Modell. Dann in der view-Modelle übergeben Sie die service-Eigenschaften, um die Eigenschaften von view-Modell, die INotifypropertychanged implementieren. Ich habe zum Beispiel einen Dienst namens INavigationService, dass bei der Umsetzung meiner Modelle anzeigen, und es hat Eigenschaften wie CanNavigate, currentView etc, ich Binde in meine Modelle ansehen. Änderungen an diesen Eigenschaften kann die Ursache für die navigation oder die Eigenschaften ändern, die anderen Modelle verbindlich sind.