Comment puis-je combiner MVVM et Dependency Injection dans une application WPF?
Pouvez-vous nous donner un exemple de la façon dont vous utilisez (votre préféré) DI cadre de fil MVVM les Modèles de Vue pour une application WPF?
Allez-vous créer un fortement connecté à la hiérarchie de Modèles de Vue (comme le lieu de tous les témoins nichée du ViewModel est une propriété de l'un des parents ViewModel et de vous lier à imbriquée contrôle du DataContext dans le code XAML) ou vous utilisez une sorte de même de plus en plus abstrait", "Modèle de Vue" Manager", qui maintient certains faiblement connectés à la hiérarchie... comme dans la CABINE, peut-être?
source d'informationauteur Max Galkin
Vous devez vous connecter pour publier un commentaire.
Si un modèle de vue ne peut exister que dans le cadre d'un autre, j'ai créer une relation forte. Qui est le propriétaire de la vue modèle aura une référence directe à un ou plusieurs des personnes dépendantes des modèles de vue. Si, d'autre part, un modèle d'affichage doit être en mesure d'exister avec ou sans l'autre, je prends un loosely-coupled approche où ils communiquent via un bus d'événement.
En termes d'utilisation des DI avec MVVM, absolument, vous pouvez combiner les deux. C'est aussi simple que:
Noter, cependant, que cela suppose un "modèle de vue d'abord" à MVVM, qui a ses inconvénients.
Dans WPF, il est normalement assez facile et il ne faut pas compter sur la capacité d'un Conteneur d'injection de dépendances. Avez-vous lu Josh Smith article sur MVVM? Elle a assez bien décrit comment mettre en place une hiérarchie des ViewModels.
Ce qu'il n'est pas aller dans beaucoup est de savoir comment créer ces Viewmodel de dépendances (tels que les Dépôts), mais il n'est pas difficile l'extrapolation à faire.
J'ai souvent constaté que l'utilisation libérale de l'Abstrait Usines aide pas mal à ce sujet. Au lieu de directement de nouveaux pratiquent jusqu'Viewmodel je laisse l'injection d'une Usine de le faire pour moi.
Vous pouvez utiliser du Pauvre DI ou tout type de DI Récipient de fil de telles Usines pour vous.
J'ai publié cet article sur le Code du Projet sur la façon de faire un extensible application WPF utilisant MVVM MEF et de l'extensibilité. Cependant, si vous regardez de près, j'ai utilisé de la MEF pour les DI.
L'application est entièrement MVVM et utilise uniquement les DataTemplates (et, à l'occasion de la Fenêtre) pour les Vues, tout comme Josh Smith de l'article. WPF prend soin de l'application de l'Affichage correct pour le droit ViewModel pour vous. C'est doux.
Il utilise MEF, de sorte que les parties peuvent "trouver" les uns les autres. De sorte que le ViewModel de la "Vue" dans le menu, retrouve tous les éléments de menu qui sont censés être dans le sous-menu à l'aide de points d'extension, et le Viewmodel pour chacun de ces "trouver" le ViewModel qu'ils sont censés main pour la mise en page à l'aide de gestionnaire de composition de points. Ils ont aussi "trouver" la mise en page du gestionnaire de service à l'aide d'un rudimentaire service locator (MEF). Le menu Affichage exemple est presque exactement de quoi vous parlez avec imbriqué Viewmodel. Le truc cool, c'est qu'ils ne connaissent même pas les uns des autres jusqu'à ce que l'exécution.