Wechsel zwischen den Ansichten mithilfe von MVVM mit PRISMA
Ich bin neu in WPF, aber von dem, was ich gelesen habe, eine richtige Art und Weise zu erstellen, Anwendungen zu wechseln, Ansichten auf dem gleichen Fenster.
Was ich meine ist so etwas wie ein "frame" mit einem Menü und einem Arbeitsbereich, wo Ansichten sind gezeigt.
Bisher hab ich schon folgende, http://jesseliberty.com/2011/01/06/windows-phone-from-scratch%E2%80%93mvvm-light-toolkit-soup-to-nuts-3/
aber das ist für WP7 und ich kann nicht mit dem NavigationService auf einer WPF-Anwendung.
Könnte ich sagen, dass die einfachste Sache, die ich will, ist, das mainwindow.xaml hat einen Blick drauf, der anzeigt, eine Schaltfläche, wenn ich diese Taste drücken, ich möchte eine neue Ansicht angezeigt werden auf dem gleichen Fenster (und die alte Ansicht zu verschwinden).
Was ist die richtige Art und Weise der Umsetzung sowas?
EDIT: gestartet mit mvvm-light, aber schließlich entwickelt, die auf ein PRISMA. Siehe meine Letzte Antwort auf weitere details.
- Hier ist meine Antwort, wo ich erläuterte, wie mithilfe der
DataTemplateSelector
: stackoverflow.com/questions/5309099/.... Auch meine Lösung kann angewendet werden, um Silverlight-nach ein paar änderungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine gute Frage - ich hatte ähnliche Fragen, als ich anfing mit MVVM. Ich benutze nur die Prism/CAL-Bibliotheken von FRAU
Ich glaube was du suchst ist die Idee von einer Region, in CAL. Es ist im Grunde ein benannter container-Steuerelement, das stellt die Dinge. Im Grunde, you name einer region in eine top-level-UI-Stück, wie Sie Ihre Haupt-Fenster. Ihre app hat wahrscheinlich eine kleine Anzahl von diesen: vielleicht eine Kopfzeile, eine Fußzeile und Hauptfenster Regionen. (Das ist, wie ich es getan habe sowieso.). Dann aus dem code hinter die Sie zugreifen können, die region durch ein region-manager, deaktivieren Sie es, und löschen Sie in Ihrem ViewModel. Das ViewModel abgebildet werden, um es in den entsprechenden Anzeigen und voila die neue Ansicht wird angezeigt.
Von einer Kodierung Standpunkt, ich habe in der Regel gesehen, wie er gebrochen wie diese:
Sie haben eine Art von einem NavigationController, die eine Methode hat oder zwei aus dem clearing der region und zeigt eine neue ViewModel->Ansicht und hat auch Methoden wie GoToPageX(). Diese Zusammenfassungen der region-manager. Dann hast du ein ViewModel für jede Seite und eine Ansicht für jede Seite. Jedes ViewModel dauert in der NavigationController über dependency injection (aber Sie können auch neue erstellen, wenn Sie nicht mit DI). Dann auf dem ViewModel, macht es einen Befehl bekommt, zugeordnet zu der Taste, und fordert den NavigationController.
Irgendwo Sie haben auch zu registrieren, die ViewModels mit den Ansichten verwendet, um Ihnen zu zeigen.
Hier ist ein Beispiel für einen NavigationController:
Hier ist ein Beispiel für das registrieren einer Ansicht mit einem ViewModel programmgesteuert. Viele Leute tun dies in XAML, aber Sie können es auch tun, im code der IMO funktioniert besser, wenn Sie sich mit dependency injection, wie Sie sich anmelden können, Ihre Ansichten und dependency injection Sachen alle zur gleichen Zeit, wenn das Modul geladen.
Am Ende des Tages, müssen Sie ein kleines bisschen code, UI-bewusst (oder ein UI-Steuerelement, das hört Nachrichten, die von nicht-UI-code, der weiß, ein kleine etwas über die UI-wie die region-Namen) und ermöglicht es Ihnen, zu kleben die ViewModel-in Platz. Jedoch dieser code ist in der Regel super minimal und erfordert definitiv kein code-behind-außer für die out-of-box-Komponenten. MVVM ist eine Art, eine Menge zu nehmen in, wenn Sie tatsächlich haben, um die Implementierung in WPF die erste Zeit, eine steile Lernkurve für eine einfache app und läuft.
Kam ich hier zur Ergänzung die Antwort von J-Trana.
Er hat mich wirklich neugierig auf das PRISMA, und ich bin froh, dass er es Tat. Dieses nur Felsen.
Ich habe in den letzten Wochen darüber zu Lesen, gerade die docs und die quickstart-Beispiele, die mit ihm gekommen. Das waren meine wichtigsten Referenzen.
So, über die Lösung...
PRISMA Regionen war in der Tat, was ich wollte. Die Telefonzentrale von ihm zur Verfügung gestellten Schlüssel war in meiner Implementierung aber ich Zwickte es ein wenig.
Zuerst legte ich die UnityContainer drin, so konnte ich mehr Flexibilität. (Oder so, ich denke, es gibt mich.)
Zweite, ich habe eine Methode LoadModule (weil ich eine modulare Struktur haben).
Von dem, was ich habe, wenn diese LoadModule führt die
Initialize()
Methode von einem meiner Module, die so etwas wie dieses...- Und das funktioniert!
Einige Tipps, lohnt sich der Hinweis:
- `//Die Eigenschaft, dass der den Kontext angibt(ViewModel) zu der Ansicht.
` Art HelloWorldType = typeof(HelloWorldModule);
diese.ModuleCatalog.AddModule(new ModuleInfo()
- Und mein Schaltschrank ist auf meinem Infrastruktur-Modul. Die Sicht der Schöpfung ist, Schießen bis zu dem Modul, das hat es und das ist mein problem gelöst.
Ich hoffe das ist nicht zu verwirrend, und ich würde wirklich gerne einige Kommentare, wie mache ich dieses Zeug... Bin ich dabei die "rechten" Weg? Gibt es eine elegantere Möglichkeit?
Sachen Wie, dass...
Sowieso, ich hoffe, das hilft und motiviert Menschen, die versuchen zu lernen, PRISMA.
PS: Wie funktioniert das code-tag zu arbeiten? Und kann ich die tags? mvvm-light macht keinen Sinn mehr.