IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[WPF - MVVM] Communications entre ViewModels


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut [WPF - MVVM] Communications entre ViewModels
    Bonjours à tous,

    je développe depuis quelque mois en WPF avec le Pattern MVVM,
    et je me pose quelque question concernant la communication entre les ViewModels.

    Jusqu'à présent, mes ViewModels implémentaient tous le design Pattern Singleton mais je trouve ça un peu "sale".

    Je viens de regarder quelques articles, et il semblerait que le design Pattern Mediator est le plus approprié à la communication,
    qu'en pensez-vous ?

    Merci d'avance.
    Cordialement,
    NeoKript

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est effectivement un pattern souvent employé en MVVM. L'intérêt est que les ViewModels n'ont pas besoin de se connaitre mutuellement, ils doivent juste connaitre les messages qu'ils souhaitent échanger, ce qui permet d'avoir un couplage faible entre les VM. Un VM diffuse un message, et tout ceux qui sont abonnés à ce type de message le reçoivent.

    Il y a des implémentations un peu partout, notamment :

    - La classe Messenger dans MVVM Light
    - La classe Mediator de Josh Smith

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Autre possibilité, si tu utilises Prism: utiliser l'EventAggregator (système d'évènements)

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Merci pour vos réponses, j'ai commencé a regarder du côté du Design Pattern Mediator, c'est simple à utiliser.

    Du coup, si j'ai un Service WCF dans une classe appelée "Service", donc si le service veux modifier des ViewModels pas de soucis, il suffit d'enregistrer les méthodes à appeler par le service dans le constructeur du ViewModel, et inversement si le ViewModel veux appelé une méthode du Service.

    Par contre, on ne peux passer qu'un seul parametre à la méthode NotifyColeague(T Message, Object Parameter), du coup comment faire si on a plusieurs paramètre à passer à la méthode ? On passe une List<Object> ou quelque chose du genre, on carrément une classe contenant les éléments que l'on souhaite passer ?

    Merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    De plus, je ne comprend pas tout concernant la méthode Register ...

    Elle prendre un Object correspondant au message à envoyer et la méthode de callback (Action<Object> Callback).

    Comment puis-je faire pour faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ViewModelMainWindow()
            {
                Messenger.Instance.Register(MediatorMessages.MainWindows_SetTitle, this.ChangeTitle);
            }
     
            public void ChangeTitle(String Title)
            {
                this.Title = Title;
            }
    J'ai plutôt l'habitude d'utiliser les delegates...

    Car si on est obliger de mettre toutes les méthodes anonymes je trouve ça pas très propre..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Messenger.Instance.Register(MediatorMessages.MainWindows_SetTitle, Param => {
                            this.Title = (String)Param;
                    });
    Merci d'avance

    Edit :
    J'ai trouvé en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Messenger.Instance.Register(MediatorMessages.MainWindows_SetTitle, Param => this.SetTitle((String)Param));
    Par contre quand vous avez plus d'un paramètre comment faites-vous ?

  6. #6
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    Par contre quand vous avez plus d'un paramètre comment faites-vous ?
    A première vue, je passerais une collection. Ou alors une structure que tu as crée.

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Ok, merci pour ta reponse,

    je ferais comme ca.

    Merci encore Topic resolu.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Bonjour,

    J'ai deux fenêtres découpés avec l'architecture MVVM.

    Quand je fais des actions sur l'une, je souhaite qu'il y ait des répercusions sur l'autre et vice-versa.

    J'ai regardé la classe Mediator de Josh Smith.

    Je dois ajouter a mes modelview dans leur constructeur un mediator ?

    Merci. Bonne journée

  9. #9
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Salut Oberown,

    Je ne connais pas trop Mediator (j'utilise MVVM Light Toolkit) mais le principe reste le même.

    Dans le constructeur de ta viewmodel 1, tu t'abonnes (register) aux messages que tu souhaites recevoir. Pour chaque abonnement, tu définis un comportement (delegate par exemple) à exécuter lors de la réception d'un message.

    Ensuite tu n'a plus qu'à envoyer les messages depuis une viewmodel au moment où tu le souhaites.

    Regarde plus haut le lien donné par Tomlev pour un exemple plus concret

    @+

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Je suis allé ici pour plus de renseignements: http://marlongrech.wordpress.com/200...-applications/

    Et je met mon mediator dans ma classe d'abstract

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Communication entre deux fenêtres (WPF, MVVM)
    Par viktor56 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 29/11/2014, 14h48
  2. MVVM Communication entre deux fenêtres
    Par Oberown dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 24/01/2012, 00h54
  3. WPF MVVM : créer un viewmodel - .cs dans .xaml
    Par zulad dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 30/09/2011, 18h45
  4. [WPF][WCF] Communication entre deux applications
    Par DotNET74 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 16/08/2010, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo