Nous construisons une application à l'aide du motif MVVM, nous avons des contrôleurs qui métallient toutes les vues et les images de vue à l'aide de DI. Tous les exemples de MVVM que j'ai vu sont vraiment simplistes et ont 1 vue. Comment / les mentalages doivent-ils répondre au contrôleur? Le contrôleur sait que les modèles et les vues devraient-ils envoyer des événements sur le contrôleur? Où devrait-on se produire? Modèle? Manette? p>
5 Réponses :
Votre viewModel pourrait-elle ne pas prendre une dépendance sur un icontroller ou une autre interface, ils peuvent donc en parler? J'essaie de garder autant de logique d'application hors de la vue que possible, car ces classes peuvent facilement devenir ballées.
MyViewModel(IController controller)
{
this.controller = controller;
}
void Save()
{
this.controller.Save();
}
Eh bien, le contrôleur sait sur la viewModel, nous ne voulons pas de dépendance à 2 voies ou la chance qu'une vue de vue soit réutilisée par un autre contrôleur.
Hmmmm, je ne suis pas entièrement sûr de comprendre quel modèle vous utilisez. Dites-vous que vous avez un contrôleur par vue? N'est-ce pas plus mvc que mvvm? Peut-être que vous pourriez ajouter un peu de code exemple à votre question pour montrer comment vous créez une vue et une vue de vue.
Un contrôleur par vue Non, un contrôleur par cas d'utilisation. Désolé si je n'ai pas fait cela clair.
J'utilise une configuration similaire pour vous. Dans mon contrôleur, où ma DI et mon injection d'affichage tombe, je continue parfois de faire référence au point de vue (qui tient la vue). Certains cas, je peux avoir un événement sur la machine virtuelle qui est traitée par le contrôleur. Dans d'autres cas extrêmes (comme si le VM / V a été créé en dehors du contrôleur, disons dans une autre machine virtuelle), je peux même utiliser l'éparggregator (avec une référence forte) pour écouter des événements pouvant être tirés sur le VM. Dans ce cas, une référence stockée au VM n'est pas nécessaire. P>
Notre contrôleur ne connaît pas le VM. Juste et interface à la vue. Le VM est injecté de là. L'idée est que le contrôleur ne connaît pas le motif que l'interface utilisateur est la mise en œuvre. Nous pouvons donc potentiellement échanger l'interface utilisateur facilement. Qui conduit à nos problèmes, je pense.
Nous utilisons également les contrôleurs, mais dans notre cas, ils sont responsables du flux de travail de l'application. Le contrôleur connaît la vue Model et le modèle mais pas la vue concrete car cela sera injecté par le conteneur de la COI. P>
Si vous êtes intéressé par un exemple indiquant plus d'une seule interface utilisateur (boîte de dialogue modale, assistant avec flux de travail conditionnel), vous pourriez avoir un coup d'œil à: p>
Cadre d'application WPF (WAF) - http://waf.codeplex.com P>
Ya nous faisons les choses le contraire. Notre contrôleur connaît une interface d'affichage et injecte la viewmodel et le modèle.
Que diriez-vous d'utiliser des événements dans lesquels le contrôleur s'abonne aux événements VM ou à l'aide d'un motif de médiateur dans lequel dans un médiateur est injecté dans un VM. P>
Dans le cas d'une application comportant plusieurs modules et nécessite la séparation des préoccupations, je recommanderais d'utiliser le cadre de Prism. P>