Nous construisons une application en utilisant le modèle MVVM, nous avons des contrôleurs qui câblent toutes les vues et viewmodels en utilisant DI. Tous les exemples de MVVM que j'ai vus sont vraiment simplistes et ont une vue. Comment/est-ce que viewmodels doit communiquer avec le contrôleur? Le contrôleur connaît les modèles et les vues, le viewmodel doit-il renvoyer les événements au contrôleur? Où devrait se produire une sauvegarde? Modèle? Manette?Contrôleurs dans MVVM, Comment obtenir des informations de viewmodel à son contrôleur?
Répondre
Nous utilisons également des contrôleurs, mais dans notre cas, ils sont responsables du flux de travail de l'application. Le contrôleur connaît le ViewModel et le modèle mais pas la vue concrète car celle-ci sera injectée par le conteneur IoC.
Si vous êtes intéressé par un exemple qui montre plus d'une interface utilisateur (de dialogue modale, assistant avec flux de travail conditionnel), vous pouvez jeter un oeil à:
cadre WPF Application (WAF) - http://waf.codeplex.com
Votre ViewModel ne peut-il pas dépendre d'un contrôleur IController ou d'une autre interface, pour pouvoir y répondre? J'essaie de garder le plus possible de logique d'application hors du ViewModel, car ces classes peuvent facilement devenir gonflées. Je suis d'accord avec le fait que les frameworks MVVM ont tendance à être trop simplistes avec leurs échantillons. En particulier, le déplacement entre les vues/écrans dans votre application est quelque chose que j'aimerais voir plus d'exemples de. Je crée une interface IViewManager, pour permettre à mes ViewModels de demander que nous passions à une autre vue.
Eh bien, le contrôleur connaît le viewmodel, nous ne voulons pas une dépendance 2 voies passe ou la chance que viewmodel mon être réutilisé par un autre contrôleur. – nportelli
Hmmmm, je ne suis pas entièrement sûr de comprendre le motif que vous utilisez. Voulez-vous dire que vous avez un contrôleur par vue? N'est-ce pas plus MVC que MVVM? Peut-être pourriez-vous ajouter un petit exemple de code à votre question pour montrer comment vous créez une vue et un viewmodel. –
Un contrôleur par vue non, un contrôleur par cas d'utilisation. Désolé si je n'ai pas précisé cela. – nportelli
Je vous utilise une configuration similaire. Dans mon contrôleur, où mon DI et l'injection de vue descend, je garde parfois la référence au ViewModel (qui tiennent la vue). Dans certains cas, je peux avoir un événement sur la VM qui est géré par le contrôleur. Dans d'autres cas extrêmes (comme si le VM/V était créé en dehors du contrôleur, disons dans une autre VM), je pourrais même utiliser l'EventAggregator (avec un ref fort) pour écouter les événements qui pourraient être déclenchés sur la VM. Dans ce cas, une référence stockée sur la machine virtuelle n'est pas nécessaire.
Notre contrôleur ne connaît pas la VM. Juste et interface à la vue. La VM est injectée à partir de là. L'idée est que le contrôleur ne connaît pas le modèle que l'interface utilisateur met en œuvre, de sorte que nous pouvons potentiellement échanger l'interface utilisateur facilement. Ce qui conduit à nos problèmes, je pense. – nportelli
Que diriez-vous d'utiliser des événements dans lesquels le contrôleur souscrit à des événements VM ou à l'aide d'un modèle de médiateur dans lequel un médiateur est injecté dans une machine virtuelle.
Dans le cas d'une application qui a plusieurs modules et qui nécessite une séparation des préoccupations, je recommande d'utiliser le framework prism.
- 1. Comment faire passer des informations de appDelegate dans l'un des contrôleurs de vue du contrôleur UINavigation
- 2. Prism2/MVVM Close View from ViewModel
- 3. Comment transmettre les informations de View à ViewModel avec DelegateCommand?
- 4. MVVM - ViewModel qui est aussi une région?
- 5. WPF - MVVM Commande lie Sub ViewModel
- 6. MVVM: CollectionView dans ViewModel ou CollectionViewSource dans xaml?
- 7. MVVM ViewModel doit-il effectuer une conversion/validation de type?
- 8. MVVM - La vue doit-elle faire référence au Presenter/ViewModel?
- 9. Comment obtenir des informations à partir des normes?
- 10. Comment obtenir User.Identity.Name à partir d'un contrôleur?
- 11. WPF (MVVM): Câblage de viewModel à afficher dans le code-behind de Windows?
- 12. Comment puis-je obtenir le contrôle lié à une propriété dans la fin du ViewModel?
- 13. À partir de l'action d'un contrôleur, comment puis-je obtenir les informations d'itinéraire actuelles?
- 14. Comment construire le ViewModel dans MVVM pour ne pas violer le principe de responsabilité unique?
- 15. ASP.NET MVC - Travail des contrôleurs
- 16. Comment obtenir des informations de VS_VERSION_INFO dans le contrôle ActiveX
- 17. Une bonne approche des événements dans MVVM
- 18. silverlight MVVM viewmodel pour voir la liaison ne fonctionne pas
- 19. Comment puis-je obtenir des informations récapitulatives à partir d'images?
- 20. Obtenir des informations sur Wikipedia - comment obtenir un formulaire HTML?
- 21. Silerlight MVVM Gestion des exceptions
- 22. Obtenir des informations d'identification SharePoint à partir de SaveFileDialog
- 23. comment passer des informations à une vue d'un contrôleur puis le récupérer dans le contrôleur avec asp.net mvc?
- 24. Comment mettre en évidence et sélectionner du texte dans une TextBox à partir de ViewModel
- 25. WPF MVVM manière correcte à l'événement feu sur la vue de ViewModel
- 26. Comment faire pour aller-retour des données en lecture seule entre les vues et les contrôleurs
- 27. Comment empêcher les contrôleurs de vue dans un contrôleur de barre d'onglets de tourner?
- 28. comment obtenir des informations de fichier/répertoires de recherche
- 29. GlobalSettings ViewModel
- 30. Meilleure pratique pour les relations parent/enfant-viewmodel dans MVVM avec Onyx?
Ya nous faisons les choses le contraire. Notre contrôleur connaît une interface de vue et injecte le viewmodel et le modèle. – nportelli