WPF-MVVM-Kommunikation zwischen View-Modell
Arbeite ich auf WPF-MVVM-Anwendung, wobei ich habe 2 views View1 und Ansicht2 mit Ihren jeweiligen ViewModels. Nun, ich möchte auf dem klicken einer Schaltfläche in View1 schließen würde View1 und öffnen Ansicht2 mit ViewModel1.
Außerdem will ich einige Daten sagen, dass eine Instanz der person-Klasse zum ViewModel2 beim öffnen von ViewModel1, die verwendet werden, zum anzeigen von Informationen in Ansicht2.
Was ist die beste und vielleicht der einfachste Weg, dies zu erreichen, innerhalb ViewModels nur möchte ich vermeiden zu schreiben von code für die navigation im code hinter.
InformationsquelleAutor user1662008 | 2014-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie über die Verwendung der Mediator-pattern (siehe zum Beispiel technical-recipes.com oder John Smith) oder schwach Ereignisse? Afaik mehrere MVVM frameworks /libs (wie PRISM, Caliburn.Micro, MVVMCross) kommen bereits mit den Infrastruktur-code für diese.
Es gibt auch separate Bibliotheken, die unabhängig von einem bestimmten mvvm-framework, wie Appccelerate EventBroker, die Ihnen helfen, etwas entlang der Linien von, was Sie wollen.
Events, allerdings Frage ich mich, ob Sie benötigen ein feedback, ob die Veranstaltung war "richtig" behandelt oder nicht. Es gibt Möglichkeiten, dies zu erreichen (änderung der Wert des event-args, die Handhabung der Ereignisse synchronisieren, nach auslösen des Ereignisses, überprüfen Sie den Wert der Veranstaltung args), aber Sie sind nicht so präzise, wie eine Methode, die return-Wert oder eine Methode eine Ausnahme werfen.
EDIT: sorry ich habe gerade gemerkt, dass die zweite view/viewmodel ist nicht geöffnet, noch nicht. Also meine "Lösung" ist nicht (einfach) anwendbar. Sie müssen übergeben Sie die Anweisung "oben" in der Ansicht Modell-Struktur, vielleicht sogar zu der Wurzel, wo Sie instanziiert werden kann und zeigen Sie das neue view-Modell (Karte in einem neuen Fenster oder einem ContentControl in eine vorhandene Ansicht?)
InformationsquelleAutor BatteryBackupUnit
Habe ich diese
Messenger
Klasse Verarbeitung der Kommunikation zwischen ViewModels.Registrieren für ein person-Objekt in
MainViewModel
:Benachrichtigt alle registrierten ViewModels über den zusätzlichen person aus der
CreatePersonViewModel
:Source code:
können Sie teilen diese MessengerKey Erweiterung, die Sie erstellt?
ja, das ist sicher. Ich machte einen github-repo: github.com/Yeah69/MessengerPattern
Das funktioniert fantastisch!!! Nur eine kurze Frage, wie würde ich die Registrieren, wenn die Methode keine Argumente ?
private void MyMethod()
InformationsquelleAutor Dalstroem
Verwenden Sie eine winzige gewidmet Licht Message Bus. Es ist nicht Teil einer MVVM Rahmen, so kann man es verwenden, unabhängig. Sehr sehr einfach zu installieren und zu verwenden.
Richtlinien für die Verwendung des
InformationsquelleAutor AnjumSKhan