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 :

Binding Singleton - ViewModel - View


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 75
    Par défaut Binding Singleton - ViewModel - View
    Bonjour à tous,

    J'ai un problème de binding sur un modèle Singleton-ViewModel-View

    mon infrastructure est la suivante, j'ai une classe Singleton où ma propriété est déclarée.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
      public string CurrentMpEvent
            {
                get
                {
                    if (m_CurrentMpEvent == null)
                        m_CurrentMpEvent = MpLibrary.MpEvents.FirstOrDefault();
     
                    return m_CurrentMpEvent;
                }
     
                set
                {
     
                    m_CurrentMpEvent = value;
                               this.NotifyPropertyChanged("CurrentMpEvent");
                }
            }
     
     private void NotifyPropertyChanged(string info)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
    Une autre propriété est créée dans mon ViewModel qui reprendre la propriété créée dans mon singleton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public string CurrentMpEventVM
            {
                get
                {
                    return Singleton.Instance.CurrentMpEvent;
                }
            }
    Finalement, je binde ma view sur la propriété du ViewModel comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       <Label Content="{Binding Path=CurrentMpEventMP, UpdateSourceTrigger=PropertyChanged}" />
    Le problème est lorsque la propriété du Singleton est setté, la notification ne se fait pas (PropertyChanged = null). D'où peut-venir le problème???



    Précision, en bindant directement la view au Singleton, cela marche, mais j'aimerais passer par le viewmodel, il me semble que c'est plus propre et plus flexible...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Label Content="{Binding Source={x:Static da:Singleton.Instance}, Path=CurrentMpEventMV}" />
    Merci d'avance pour vos réponses.

  2. #2
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    La propriété CurrentMpEventVM de ton ViewModel ne lève jamais de PropertyChanged ton le binding n'est jamais notifié....

    Ce que tu peux faire c'est exposé le Singleton directement dans le ViewModel mais ce que je préfère en général c'est de mettre le singleton comme une ressource statique dans les resources de l'application et y accéder classiquement... question de goût !

    Bonne soirée,

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 75
    Par défaut
    mais la propriété du singleton est notifiée, et comme ma propriété du view model reprend la propriété du singleton, il me semblait que c'était ok...

    Donc pour toi, il faudrait que je notifie également la propriété du viewmodel ?

    peux-tu m'en dire plus pour le singleton en ressource statique, je n'ai pas bien saisi.

    Merci

  4. #4
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    Oui la propriété du Singleton notifie bien des changements, par contre c'est la propriété du ViewModel qui est exposée au binding bien qu'elle ne fait que retourner la valeur du Singleton !

    Pour la resource statique :
    1. Au lancement de l'appli, tu met ton singleton en resource (Resources["monSingleton"] = tonSingleton;
    2. Dans le code tu y accèdes avec dans tes bindings Source={StaticResource monSingleton}


    En éspérant que cela soit clair...

  5. #5
    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
    ou alors tu fais simplement un truc comme ça :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <Label Content="{Binding Path=CurrentMpEventMP, Source={x:Static local:Singleton.Instance}}" />

    (la propriété UpdateSourceTrigger ne sert à rien vu que le binding d'un Label est OneWay par défaut, et que d'ailleurs ça ne servirait à rien de le mettre en TwoWay puisqu'un label n'est pas éditable)

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 75
    Par défaut
    à Tomlev:

    oui j'ai fait un essai avec le singleton directement appelé en XAML, mais est-ce que c'est vraiment propre ??

    Le singleton sera également utilisé pour la source d'un Tab Control, TextBox...et pas uniquement pour un Label

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

Discussions similaires

  1. Méthodologie Model-View-ViewModel au sein d'une application WPF
    Par Louis-Guillaume Morand dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 12/06/2015, 14h10
  2. [MVVM] Binding View ViewModel
    Par Plawi dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 18/10/2011, 11h29
  3. [MVVM] Binding à un ViewModel depuis le code-behind
    Par Gigi070 dans le forum Windows Presentation Foundation
    Réponses: 23
    Dernier message: 29/03/2010, 17h46

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