Je suis en train de mettre en œuvre MVP/M-V-VM dans WPF et j'ai de la chance jusqu'à maintenant. Cependant, je ne vois pas comment ce modèle supporte l'implémentation de boîtes de dialogue Modal. J'ai dérivé mon travail de Crack.NET (http://www.codeplex.com/cracknetproject) pour apprendre comment cela fonctionne.Boîtes de dialogue Model-View-Presenter et Modal .... Comment?
J'ai une vue ShellView (qui est juste XAML) qui a un menu dessus. Le menu se lie à une commande dans le ShellModelView qui dit "EditPreferences". ShellModelView implémente l'ICommand pour EditPreferences et ici nous voulons mettre en place une boîte de dialogue pour permettre à l'utilisateur de modifier les préférences pour l'application.
Plusieurs problèmes ici: 1. ShellModelView ne fait pas référence à ShellView pour que le dialogue soit correctement parent. ShellModelView est le DataContext de ShellView mais je ne vois pas de référence arrière configurée. 2. ShellModelView ne devrait pas charger l'interface utilisateur explicite de toute façon. Alors, quel est le modèle d'interaction approprié ici? 3. Comment puis-je créer mon PreferencesDialog afin qu'il soit correctement séparé entre la logique et la vue? PreferencesDialog lui-même doit être une fenêtre afin que vous puissiez appeler ShowDialog dessus, mais cela signifie que vous avez besoin d'une référence à la fenêtre (par exemple View) afin de l'instancier. Idéalement, je devrais être capable de tester le code/validation dans PreferencesDialog sans instancier la vue (en utilisant une vue Mock peut-être?).
Je pensais que l'un des buts de MVVM était de ne pas avoir de ViewModel au courant de la vue (ou dialogue dans votre exemple)? Ainsi, n'importe quel nombre de vues (ou aucune) peut utiliser un ViewModel à tout moment. Avoir votre ViewModel définir des choses sur une interface de vue brise un peu cela. –
Ce n'est pas parce que l'interface isole la commande de l'implémentation du dialogue. –
C'est le modèle MVP. La modification de l'interface View proposée entraînerait la rupture du ViewModel, par ex. changer la signature d'une méthode ou d'un type de propriété, BAM vous venez de casser votre ViewModel qui a une dépendance sur l'interface. Dans MVVM, la vue "observe" le ViewModel via des liaisons. Apporter des modifications à la vue (par exemple ajouter des contrôles) ne nécessitera pas de changer d'interface ou même de recompiler le ViewModel. Chose cool, un seul ViewModel peut être «observé» par de nombreuses vues. Voir le modèle d'observateur dans le livre de GOF et lisez la section de documents de prisme «modèle de présentation» si vous êtes plus intéressé par ceci :) –