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

C# Discussion :

Communiquer entre viewmodel


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Communiquer entre viewmodel
    Bonjour,

    Je rencontre un problème dans une application WPF / c#. Pour développer j'utilise le pattern MVVM.
    J'ai un viewmodel principal dans lequel j'aimerais setter la propriété d'un autre viewmodel...

    Donc dans mon principal j'ai quelque chose du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SecondVM svm = new SecondVM();
    svm.MyProperty = "Toto";
    La propriété que je set est bindée à une vue mais ça ne s'affiche pas...
    J'ai mis des points d'arrêt sur la propriété, elle est bien setter mais la valeur ne change pas dans la vue.
    Juste pour tester mon binding, dans le constructeur du second viewmodel j'ai instancié ma propriété et là elle s'affiche.

    Y a t-il une astuce que j'ignore pour "communiquer" entre viewmodel ?

    D'avance merci pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Par défaut bonjour
    Pour dialoguer entre viewmodel , j'utilise eventaggregator du package prism de Microsoft.
    cordialement

  3. #3
    Membre expérimenté
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    Si tu n'as que ce code pour modifier ta propriété, effectivement ta vue ne sera pas modifiée, et c'est normal.
    Tu créé une nouvelle instance de ton VM et tu set la propriété, ok, mais ce n'est pas cette instance qui est bindée à ta vue.

    La solution est effectivement de passer par un système qui permet de dialoguer entre VM.

    Bonne continuation.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    Oui j’espérais qu'avec juste ce petit bout de code j'arriverais à mes fins mais... ça aurait été trop beau.

    Je vais regarder du côté des systèmes qui permettent de dialoguer entre VM.

    Si jamais vous avez un p'tit exemple simple je suis preneur... parce que sur le net c'est pas super parlant.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    Tu peux trouver un exemple simple d'utilisation d'un Mediator (c'est ce dont on parle) ici :
    http://www.codeproject.com/Articles/...diator-Pattern

    Le principe est relativement simple, tu as un service Mediator qui fonctionne pour toute ton application.
    Tes VM s'enregistre auprès de lui, en lui fournissant une Action à réaliser en cas de réception de message (dans ton cas, ça serait SecondVM qui s'enregistre).
    Ensuite, lors de la modification d'une propriété quelque part dans ton code, cette propriété envoi une notification au Mediator pour stipuler qu'elle a changée (dans le setter d'une des propriétés de ton VM principal par exemple), et le Mediator réalise toutes les actions qui ont été enregistrée.
    Voilà le grand principe.

    Bonne continuation.

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Par défaut Bonjour
    je préfère le pattern Observer, (surement parce que j'ai plus l'habitude d'utiliser celui là )
    je t'envoie un lien ou il est mis en oeuvre au travers de eventagregator :
    http://www.codeproject.com/Articles/...ent-Delegate-a
    bon dev.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/06/2011, 18h55
  2. Comment "communiquer" entre différents projets ?
    Par StormimOn dans le forum C#
    Réponses: 17
    Dernier message: 08/07/2008, 13h55
  3. Réponses: 2
    Dernier message: 15/05/2006, 22h22
  4. Réponses: 6
    Dernier message: 29/03/2006, 17h23
  5. Communiquer entre plusieurs instances d'applications
    Par bourinator dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/09/2003, 11h24

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