Je développe une application WPF et j'ai des problèmes pour communiquer un modèle d'avis avec un autre. P>
J'ai: p>
Chaque fois qu'une propriété change dans MainviewModel, FemmeviewModel1 et ChildviewModel2 devraient être notifiées. P>
Quelqu'un peut-il suggérer une solution de contournement? P>
EDIT: Je pense à une solution discrit MVVM Light ( http://simplemvvmtoolkit.codeplex.com/sourcecontrol/changecet / Voir / 23821 # 313594. ), qui met en œuvre un bus de message. Est-ce la bonne approche? P>
3 Réponses :
J'utiliserais un iservice mis en œuvre par chaque modèle de vue. Ensuite, dans la vue Modèles, vous pouvez transmettre les propriétés de service aux propriétés du modèle de vue qui implémente INOTIFYPROPERTYCHANGED. Par exemple, j'ai un service appelé inavigationservice qui est mis en œuvre par mes modèles de vue et il possède des propriétés telles que Cannavigate, CurrentView, etc. que je lie à mes modèles de vue. Les modifications apportées à ces propriétés peuvent provoquer une navigation ou une modification des propriétés que d'autres modèles de vue sont contraignants. p>
Pourriez-vous fournir un exemple très simple de ce que vous avez suggéré? J'ai besoin d'une chose très simple pour passer un objet d'un modèle d'affichage à l'autre. Pouvez-vous m'aider?
Dans la plupart des cas, je ne suggérerais pas d'utiliser un lieu centralisé pour partager des "événements" / "notifications", comme étant épargggregator, etc. Cela conduit à des problèmes ultérieurs liés à des relations non claires entre ViewModels. De telles notifications ont du sens dans des cas très spécifiques lorsque les relations entre l'auditeur / éditeur ne sont pas connues même sur la phase de conception. Je suggérerais de dessiner un diagramme simple avec des relations entre viewModels et de trouver un moyen d'utiliser des événements Standard .NET, donc lorsque vous avez clairement répété entre ViewModels comme ViewModel1, a une référence à ViewModel2 afin de pouvoir vous abonner à un événement ou de fournir son propre rappel. Soyez facile de construire de telles notifications d'événement. P>
C'est une bonne réponse, mais puisque ma candidature est très simple, j'utiliserai un "lieu centralisé pour partager" événements "/" notifications ", comme épargggregator" en raison de nombreuses références et exemples de code
C'est un très mauvais conseil qui conduirait très rapidement à des fuites de mémoire horribles. Si vous voulez voir des relations plus clairement, vous pouvez créer un addon de Resharper qui recongénerez les modèles de registre / de désinscription
Cette approche est beaucoup plus facile à déboguer que la réponse acceptée.
Pourriez-vous fournir un exemple très simple de ce que vous avez suggéré? J'ai besoin d'une chose très simple pour passer un objet d'un modèle d'affichage à l'autre. Pouvez-vous m'aider?
La manière courante des images de vue de communiquer entre eux L'implication du modèle de conception thémateur est-elle p>
Voici comment cela se fait dans mvvmlight http: // social. msdn.microsoft.com/forums/en-us/wpf/thread/27AAEFFF-E463-451C-87D9-37367A343E0E P>
en prisme est: http: // blogs.u2u.be/diederik/post/2011/01/15/USTION-Le-prism-40-Event-agregator.aspx P>
à Caliburn est: http : //www.mindscapehq.com/blog/index.php/2012/02/01/caliburn-Micro-Part-4-the-event-agregator/ P>
Deux liens liés: 1) CODEPROJEJECT.COM/Articles/35277/MVVM-Mediator- Modèle 2) Joshsmithonwpf. wordpress.com/2009/04/06/...
@GuilherMeCGS, les deux liens sont cassés à moi
@ Геннадий Ванин новосибирск, les deux liens travaillent pour moi. Êtes-vous sûr de ne pas être sous un pare-feu?
@guilhermecgs, a commencé à travailler pour moi aussi
La manière dont la réponse est écrite semble suggérer que le motif de médiateur et le modèle d'agrégateur d'événement sont la même chose, mais ils ne sont pas: Lostechies.com/derickBailey/2013/03/18/... .
Beaucoup trop général. Vous devez essayer ceci seul. Voir inotifyPropertychangned
Le titre de cela est trompeur et il n'y a pas une question spécifique.
Je ne connais pas d'autres frameworks MVVM, mais MVVM Light and Reactiveui inclut les implémentations de messages de bus comme mentionné dans votre titre.