Question

Je construis une application WPF et en essayant de se conformer aux meilleures pratiques MVVM. J'utilise le cadre MVVM Fondation et remarqué la Messenger classe , que je l'ai lu doit être utilisé pour < a href = "https://stackoverflow.com/questions/454868/handling-dialogs-in-wpf-with-mvvm"> Gestion des boîtes de dialogue WPF. Ça sonne bien, mais je suis tout à fait ne pas comprendre comment utiliser un messager à cet effet. Littéralement, tout ce que je veux faire est d'ouvrir une boîte de dialogue modale À propos -I ne pas besoin de passer des messages dans les deux sens.

était l'intention de la classe Messenger à utiliser pour les cas où les dialogues ont besoin d'un message de son parent, ou retourner un message à son parent? Est-il exagéré pour une boîte de dialogue A propos? Serais-je mieux le code ajoutant simplement à un gestionnaire d'événements pour afficher la boîte de dialogue?

Était-ce utile?

La solution

L'idée derrière le modèle de messagerie ne pas spécifiquement rien à voir avec montrant les boîtes de dialogue. L'idée est simplement de fournir un moyen découplé de communiquer entre ViewModels.

Vous pouvez tirer parti de cette infrastructure pour résoudre votre problème, mais vous devrez mettre en œuvre la projection de la boîte de dialogue vous.

Comme Phillip a montré ci-dessus, vous pouvez envoyer des messages entre ViewModels. Lorsque votre ViewModel reçoit le message qu'il peut définir sa propre propriété interne, dites « ShowDialog », true.

Vous pouvez alors avoir une liaison qui réagit à cette opération de changement de propriété et ouvre une boîte de dialogue.

J'ai aussi construit un cadre simple de messagerie pour le motif de MVVM qui emprunte à l'idée de Josh (et plusieurs autres cadres existants), vous pouvez lire à ce sujet ici

Autres conseils

Disons que vous avez une vue parent et une vue de dialogue. En MVVM ils ont tous deux un modèle de vue. Il est bon de garder ces modèles de vue découplées, à savoir qu'ils ne sont pas des références les unes aux autres. Et pourtant, ils doivent communiquer entre eux. La classe Messenger agit en tant qu'intermédiaire entre ou médiateur pour la communication d'informations entre les deux classes. Voir le code de prise blog de Josh .

text alt

est ici l'objet A. Il est appel à la méthode Register du médiateur met en œuvre: quand je reçois le message ObjectBSaidSomething, du médiateur, je vais le mettre en cache dans les WhatObjectBSays membres

.

text alt

Voici l'objet B, qui met en œuvre: Je vais envoyer un message ObjectBSaidSomething. Notez que l'objet B ne sait rien à propos de l'objet A. Il pourrait y avoir rien écouter pour ObjectBSaidSomething, ou 100 objets qui écoutent ObjectBSaidSomething, mais l'objet B ne sait pas et ne se soucie pas. Ce découplage est bon, ce qui est la raison pour laquelle le modèle de médiateur est une bonne idée. Et cela est la façon dont la fondation MVVM recommande que l'information est passée entre les modèles de vue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top