2009-08-25 10 views
10

Ich arbeite an einer neuen WPF-Anwendung und versuche, so nah wie möglich am MVVM-Muster zu bleiben. Meine XAML-Dateien haben jetzt keine Codebehinds, und meine gesamte Interaktivität wird mit Josh Smiths RelayCommand-Klasse und Befehlen in meinen ViewModel-Klassen erreicht.Öffnen eines About-Felds mit MVVM-Muster

Das funktionierte gut, bis ich anfing, an den Housekeeping-Aufgaben zu arbeiten, wie einer About Box und einer System Preferences-Seite. Ich möchte diese als modale Dialoge haben, aber wenn ich einen RelayCommand erzeuge, um diese Seiten zu öffnen, erzeuge ich eine Abhängigkeit von der Ansicht innerhalb meines Ansichtsmodells.

Dies scheint mir im Gegensatz zu den MVVM Muster.

Gibt es eine etablierte Methode zum Erstellen neuer Fenster (modal und/oder modeless) innerhalb des MVVM-Musters, ohne eine Abhängigkeit zu erzeugen? Es scheint, als ob ich das ViewModel nur sauber halten kann, indem ich einen Click-Ereignishandler in der XAML-CodeBehind-Datei erstelle und die neue Ansicht in der alten Ansicht erzeuge.

Irgendwelche Empfehlungen?

Antwort

7

Eine Möglichkeit, dies zu umgehen, ist die Implementierung eines Dienstes, der Ansichten für ViewModels bereitstellt. Ansichten registrieren sich beim Dienst und ViewModels können Dialoge vom Dienst anfordern. Dies ist ein Beispiel für die Gang of Four mediator pattern.

0

Bitte lesen Sie meine Antwort auf this question darüber, warum die Window-Klasse selbst ein ViewModel ist, so dass Sie es ohne Sorgen direkt aus Ihrem ViewModel verwenden können.

0

Laurent Bugnion hat einen schwach referenzierten Mediator, mit dem er Dialogmeldungen anzeigt. Zusammen mit der Nachricht, die gesendet wird, wird ein Rückrufdelegat gesendet, damit der Abonnent ausgeführt wird. Sie könnten das gleiche Konzept verwenden, um einen Dialog zu zeigen. Überprüfen Sie DialogMessage.cs from the source here.

0

Wir verwenden Controller-Klassen, die für den UI-Workflow zuständig sind. Sie erstellen die modalen Fenster und vermitteln zwischen verschiedenen ViewModels.

Wie Sie ein modales Fenster mit dem Viewmodel-Viewmodel (MVVM) Muster öffnen kann, wird hier in der Ansichtsmodell Beispielanwendung gezeigt:

WPF Application Framework (WAF)

http://waf.codeplex.com