Ich bin MVP/M-V-VM in WPF implementieren und ich habe viel Glück damit. Ich sehe jedoch nicht, wie dieses Modell die Implementierung von Modal-Dialogfeldern unterstützt. Ich habe meine Arbeit von Crack.NET (http://www.codeplex.com/cracknetproject) abgeleitet, um zu lernen, wie dieses Zeug funktioniert.Model-View-Presenter und Modal Dialogfelder .... Wie?
Ich habe eine ShellView-Ansicht (die nur XAML ist), die ein Menü enthält. Das Menü bindet an einen Befehl in der ShellModelView, der "EditPreferences" sagt.
Die ShellModelView implementiert den ICommand für EditPreferences und hier möchten wir ein Dialogfeld erstellen, damit der Benutzer Einstellungen für die Anwendung bearbeiten kann.
Mehrere Probleme hier: 1. Die ShellModelView hat keine Referenz auf die ShellView, um den Dialog ordnungsgemäß Eltern. Die ShellModelView ist der DataContext der ShellView, aber ich sehe keine Backreference, die eingerichtet ist. 2. Die ShellModelView sollte sowieso keine explizite UI laden. Was ist das richtige Interaktionsmodell hier? 3. Wie baue ich meinen PreferencesDialog so auf, dass er zwischen Logik und Ansicht getrennt ist? PreferencesDialog selbst muss ein Fenster sein, damit Sie ShowDialog darauf aufrufen können, aber das bedeutet, dass Sie einen Verweis auf das Fenster (z. B. Ansicht) benötigen, um es zu instanziieren. Idealerweise sollte ich in der Lage sein, den Code/die Validierung in PreferencesDialog zu testen, ohne die Ansicht zu instanziieren (vielleicht mit einer Mock-Ansicht?).
Ich dachte, eines der Ziele von MVVM ist nicht zu erreichen, die weiß, dass das Ansichtsmodell eine Sache, über die Aussicht (oder Dialog in Ihrem Beispiel)? Damit eine beliebige Anzahl von Views (oder keine) ein ViewModel zu einem beliebigen Zeitpunkt verwenden kann. Wenn Sie Ihr ViewModel Dinge auf einer View-Oberfläche einstellen, wird das irgendwie kaputt gemacht. –
Es nicht, weil die Schnittstelle den Befehl von der Implementierung des Dialogs isoliert. –
Das ist MVP-Muster. Das Ändern der vorgeschlagenen View-Oberfläche würde das ViewModel, z. Ändern Sie die Signatur einer Methode oder eines Typs einer Eigenschaft, BAM haben Sie gerade Ihr ViewModel, das eine Abhängigkeit von der Schnittstelle hat. In MVVM beobachtet die Ansicht das ViewModel über Bindungen. Änderungen an der Ansicht (z. B. das Hinzufügen von Steuerelementen) erfordern keine Änderung der Schnittstellen oder Neukompilierung des ViewModel. Cool ist, ein einzelnes ViewModel kann von vielen Views "beobachtet" werden. Siehe Observer-Muster in GOF-Buch und lesen Sie Prism-Dokumentation Abschnitt "Presentation Model", wenn Sie mehr daran interessiert sind :) –