Communiquer deux modèles de vue en WPF MVVM
Je développe une application WPF et j'ai quelques problèmes pour communiquer un modèle de vue avec l'autre.
J'ai:
- MainViewModel
- ChildViewModel1
- ChildViewModel2
À chaque fois d'un des changements de propriété dans MainViewModel, ChildViewModel1 et ChildViewModel2 doit être averti.
Quelqu'un peut-il proposer une solution de contournement?
EDIT:
Je pense à une solution descrided MVVM Light (http://simplemvvmtoolkit.codeplex.com/SourceControl/changeset/view/23821#313594.), qui est la mise en œuvre d'un bus de message. Est-ce la bonne démarche?
Façon trop générale. Vous avez besoin de l'essayer sur votre propre. Voir INotifyPropertyChanged
Le choix de ce titre est trompeur et il n'y a pas de question particulière.
Je ne sais pas pour les autres frameworks MVVM, mais MVVM Light et ReactiveUI inclure des messages de bus implémentations comme mentionné dans le titre.
Le choix de ce titre est trompeur et il n'y a pas de question particulière.
Je ne sais pas pour les autres frameworks MVVM, mais MVVM Light et ReactiveUI inclure des messages de bus implémentations comme mentionné dans le titre.
OriginalL'auteur guilhermecgs | 2013-04-22
Vous devez vous connecter pour publier un commentaire.
la façon la plus commune pour les viewmodels, de communiquer entre eux
est implimentation de theMediator modèle de conception
est ici comment c'est fait dans MVVMLight
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27aaefff-e463-451c-87d9-37367a343e0e
dans le Prisme est:
http://blogs.u2u.be/diederik/post/2011/01/15/Using-the-Prism-40-Event-Aggregator.aspx
dans Caliburn est:
http://www.mindscapehq.com/blog/index.php/2012/02/01/caliburn-micro-part-4-the-event-aggregator/
les deux liens sont cassés à moi
les deux liens sont de travailler pour moi. Êtes-vous sûr que vous n'êtes pas sous un pare-feu?
a commencé à travailler pour moi aussi
La façon dont la réponse est écrite semble suggérer que le médiateur de modèle et le modèle event aggregator sont la même chose, mais ils ne sont pas: lostechies.com/derickbailey/2013/03/18/....
OriginalL'auteur Nahum
Dans la plupart des cas, je ne voudrais PAS suggérer l'utilisation de tout endroit centralisé pour partager des "événements"/"notifications", comme EventAggregator, etc.. Ce qui conduit à plus tard les questions liées avec pas clairement les relations entre les ViewModels. De telles notifications de sens que dans des cas très spécifiques où les relations entre l'auditeur/éditeur n'est pas connu, même à l'étape de conception.
Je suggère de dessiner le diagramme des relations entre les ViewModels et trouver un moyen de l'utilisation de la norme .NET événements, de sorte que lorsque vous avez realtionships entre les ViewModels comme ViewModel1 a une référence à ViewModel2 donc s'abonner à un événement ou à fournir des propres de rappel, de sorte qu'il sera facile de construire de telles notifications d'événements.
c'est un très mauvais conseils qui conduirait à l'horrible fuites de mémoire très rapidement. si vous souhaitez voir des relations plus clairement, vous pouvez créer un resharper addon qui va recongnize s'inscrire/se désinscrire modèles
Cette approche est beaucoup plus facile à déboguer que accepté de répondre.
OriginalL'auteur sll
Je voudrais utiliser un IService qui est mis en œuvre par chaque modèle de vue. Puis dans la vue modèles vous pouvez passer les propriétés du service de propriétés de la vue modèle d'implémenter INotifypropertychanged. Par exemple, j'ai un service appelé INavigationService qui est mis en œuvre par mon point de vue, les modèles et il a des propriétés comme CanNavigate, lors de etc que j'associe à mon avis les modèles. Les modifications de ces propriétés peuvent causer de navigation ou de modifier les propriétés que les autres modèles de vue sont à respecter.
OriginalL'auteur J King