Beispiel 1: In meiner MVVM-Anwendung wird eine Ansicht angezeigt (wir verwenden Silverlight für die Zwecke der Diskussion) und ich klicke auf eine Schaltfläche, die mich zu einer neuen Seite führen soll.
Beispiel 2: Dieselbe Ansicht verfügt über eine weitere Schaltfläche, die beim Klicken eine Detailansicht in einem untergeordneten Fenster (Dialogfeld) öffnen soll.
Wir wissen, dass Command-Objekte von unserem ViewModel verfügbar gemacht werden, die an die Schaltflächen mit Methoden gebunden sind, die auf den Klick des Benutzers reagieren. Aber was dann? Wie schließen wir die Aktion ab? Auch wenn wir einen sogenannten NavigationService nutzen, was erzählen wir davon?
Um genauer zu sein, müssten die Command-Objekte in einem herkömmlichen View-first-Modell (wie URL-basierten Navigationsschemata wie im Web oder dem integrierten SL-Navigationsframework) wissen, welche View als Nächstes angezeigt werden soll. Das scheint die Grenze zu überschreiten, wenn es um die Trennung von Bedenken geht, die durch das Muster gefördert werden.
Wenn die Schaltfläche jedoch nicht mit einem Befehlsobjekt verbunden ist und sich wie ein Hyperlink verhält, können die Navigationsregeln im Markup definiert werden. Aber möchten wir, dass die Ansichten den Anwendungsfluss steuern und die Navigation nicht nur eine andere Art von Geschäftslogik ist? (In einigen Fällen kann ich ja und in anderen nein sagen.)
Für mich wäre die utopische Implementierung des MVVM-Musters (und ich habe gehört, dass andere dies behaupten), das ViewModel so zu verdrahten, dass die Anwendung kopflos ausgeführt werden kann (dh keine Views). Dies bietet die größte Oberfläche für codebasierte Tests und macht die Ansichten zu einer echten Skin für die Anwendung. Und meinem ViewModel sollte es egal sein, ob es im Hauptfenster, einem schwebenden Bedienfeld oder einem untergeordneten Fenster angezeigt wird, oder?
Gemäß diesem Apprach ist es einem anderen Mechanismus überlassen, zur Laufzeit zu "binden", welche Ansicht für jedes ViewModel angezeigt werden soll. Aber was ist, wenn wir eine Ansicht mit mehreren ViewModels teilen möchten oder umgekehrt?
In Anbetracht der Notwendigkeit, die View-ViewModel-Beziehung zu verwalten, damit wir wissen, was angezeigt werden soll, und der Notwendigkeit, zwischen Ansichten zu navigieren, einschließlich der Anzeige von untergeordneten Fenstern / Dialogen, wie können wir dies im MVVM-Muster wirklich erreichen?