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 Object vide


Sujet :

Windows Presentation Foundation

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut WPF MVVM Object vide
    Bonjour,

    Je suis en archi MVVM et j'utilise event aggragator.
    Mon soucis est la suivant :
    Sur un page 1 (par exemple) je sélectionne un object sur la page. J'appel cet object SelectObject.
    Grace à Event aggregator je passe l'object dans une autre view model, VM2. Le fonctionnement est correct hormis QUE ca marche seulement après le premier passage.
    1. Selection de l'object dans Page1 bindé avec VM1.
    2. EventeAggregator transmet l'object à VM2
    3. Page 2 affiche selectObject bindé avec VM2

    Le process marche qu'à partir de la deuxième sélection.
    Je ne vois pas pourquoi j'ai ce pb, j'ai modifié un peu tout dans mon code mais rien ne change, j'ai toujours besoin de faire un premier clic pour "initialiser" et ensuite tout fonctionne correctement.

    Y a t'il une piste ?

  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 : 44
    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
    Sans voir le moindre code ça va être difficile de deviner ce qui ne va pas...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    Dans ma VM1 :

    Mon constructeur possède :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OuvrirCommandeCommand = new DelegateCommand<Commande>(OuvrirCommande);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private IEventAggregator messageBus;
    private void OuvrirCommande(Commande Command)
     {
    messageBus.GetEvent<SelectedCommandeEvent>().Publish(SelectedCommande);
    }
    La solution contient la classe :
    SelectedCommandeEvent.cs avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectedCommandeEvent : CompositePresentationEvent<Commande>
    Dans la VM2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    messageBus.GetEvent<SelectedCommandeEvent>().Subscribe(maCommande);
     
    public void maCommande(Commande commande)
    {            
     SelectedCommande = commande;
    }
    Merci

  4. #4
    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 : 44
    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
    Tu es sûr que le VM2 est déjà abonné à l'évènement la première fois que tu le publies ?

    Essaie de déboguer pas à pas en mettant un breakpoint dans OuvrirCommande. Est-ce qu'il passe bien dans cette méthode la première fois ? Si ce n'est pas le cas, le problème n'est pas au niveau de l'EventAggregator...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    J'ai fait le test et oui je passe bien dans ouvrirCommande dès le premier passage.

  6. #6
    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 : 44
    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
    OK... Donc pour une raison ou une autre, VM2 ne doit pas encore être abonné à l'évènement la première fois qu'il est déclenché. A quel moment t'abonnes-tu à l'évènement ? Dans le constructeur de VM2 ? Et à quel moment VM2 est-il instancié ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    Je l'abonne dans le constructeur.
    Je ne vois pas non plus pourquoi j'ai cette problématique.

  8. #8
    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 : 44
    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
    Il n'y a pas 36 façons de trouver la cause du problème, il faut déboguer... mets des traces ou des points d'arrêts aux endroits "stratégiques" (abonnement à l'évènement, publication de l'évènement, etc) pour vérifier que tout se passe bien dans l'ordre voulu et de la façon voulue

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    Dans le constructeur de mon VM dans lequel je souscris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    messageBus.GetEvent<SelectedCommandeEvent>().Subscribe(maCommande);
    je ne passe pas dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maCommande(object gnagna)
    lors du premier appel.
    Je pense que mon pb vient de là, mais je ne vois pas pourquoi je n'y passe pas...

  10. #10
    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 : 44
    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
    Citation Envoyé par morelh Voir le message
    Dans le constructeur de mon VM dans lequel je souscris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    messageBus.GetEvent<SelectedCommandeEvent>().Subscribe(maCommande);
    je ne passe pas dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maCommande(object gnagna)
    La méthode maCommande n'est pas supposée être exécutée au moment du Subscribe, seulement quand l'évènement est publié... As-tu vérifié si tu passes bien par le Subscribe avant le premier appel à Publish ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    aahhh ok,

    non en fait j'appel le subscribe après le publish. Donc c'est pas bien, mais le subscribe est sur la VM2 et le publisch sur la VM1, comment puis je appeler en 1er le subscribe?

    je me plante qcq part?

  12. #12
    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 : 44
    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
    Citation Envoyé par morelh Voir le message
    Donc c'est pas bien, mais le subscribe est sur la VM2 et le publisch sur la VM1, comment puis je appeler en 1er le subscribe?
    Bah je sais pas, je connais pas ton programme, et je sais pas ce que représentent VM1 et VM2... Mais clairement, si VM2 est créé après VM1, tu ne peux pas t'attendre à ce qu'il gère un évènement avant d'être créé.

    Bref, difficile de te répondre sans avoir plus d'infos sur le contexte et sur ce que tu cherches à faire...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    Ok, merci , je comprends le fonctionnement de truc maintenant, le subscribe est utilisé pour préparer à l'événement, sur lequel je peux lui ajouter une methode libre pour mon VM, et le publish me permet de déclencher l'événement en passant un paramètre.

    C'était pas super clair au début pour moi, merci en tout cas.

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

Discussions similaires

  1. [WPF - MVVM] Communications entre ViewModels
    Par NeoKript dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 06/02/2012, 14h06
  2. Enum dans un combobox WPF MVVM
    Par july4474 dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 22/11/2011, 21h44
  3. [WPF][MVVM] GridView bindé un ReadOnlyCollection
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 07/09/2010, 10h58
  4. [C#/WPF] MVVM envoie d'information au ViewModel
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 01/09/2010, 15h01
  5. [BO 6.1] Objects Vides
    Par charles_mourot dans le forum Designer
    Réponses: 1
    Dernier message: 05/12/2007, 13h23

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