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 :

Problème Binding user control


Sujet :

Windows Presentation Foundation

Vue hybride

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut Problème Binding user control
    Bonjour !

    J'ai créé récemment un user control et j'ai tenté d'implémenter au maximum des dependency property avec ses accesseurs, afin de le rendre plus utilisable.

    Le problème, c'est que le binding sur ses propriétés déclarées comme dependency property ne marche que dans un sens :

    Par exemple, lorsque je bind la propriété value d'un slider avec une propriété de mon control, je ne peux pas modifier la valeur de cette propriété en modifiant celle du slider, alors que l'inverse marche... et ce même en mettant "Mode=TwoWay" dans le binding.

    Que je mette le binding sur la propriété de mon control ou sur la propriété value du slider, le résultat est le même ...

    Voici le code de ma propriété :

    Code c# : 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
    public static DependencyProperty PasXProperty;
     
    ...
     
    static [mon user control] ()
    {
    PasXProperty = DependencyProperty.Register("PasX", typeof(double), typeof([mon user control]), new FrameworkPropertyMetadata(1.0));
    }
     
    ...
     
    public double PasX
    {
    get{
     
    return (double)GetValue(PasXProperty);
        }
     
    set{
    SetValue(PasXProperty, value);
        }
    }


    En espérant que quelqu'un trouve une solution =S


    Cordialement,

    KiTe

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    le problème est résolu ...

    la valeur se mettait bien a jours, mais le code juste après le SetValue qui était en pratique implémenté n'était pas lu. Comme il s'agissait d'une MAj graphique, j'avais donc eu l'impression que le binding était défectueux (ce qui n'est finalement donc pas le cas)

    Il faut pour cela passer par le callback proposé dans le constructeur de la classe FrameworkPropertyMetadata et mettre le code d'action dedans.

  3. #3
    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
    Citation Envoyé par kite37 Voir le message
    la valeur se mettait bien a jours, mais le code juste après le SetValue qui était en pratique implémenté n'était pas lu
    C'est parce que les accesseurs GetXXX/SetXXX ne sont là que pour TE faciliter la vie. WPF ne les utilise pas (sauf dans certains cas spécifiques), il utilise juste DependencyObject.SetValue/GetValue. Si tu as besoin d'exécuter du code quand la valeur de la propriété est modifiée, il faut que tu définisses un PropertyChangedCallback dans les metadata de la propriété :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PasXProperty = DependencyProperty.Register("PasX", typeof(double), typeof([mon user control]), new FrameworkPropertyMetadata(1.0, PasX_Changed));
    ...
     
     
    private static void PasX_Changed(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        // ton code ici
    }

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    oui, c'est exactement cette méthode que j'ai mis en place en farfouillant un peu ^^

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/05/2011, 17h37
  2. Binding User Control
    Par KoRiGaN44 dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 29/04/2009, 10h55
  3. Problème avec user control
    Par 0365752 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/12/2007, 17h00
  4. problème avec user Control
    Par shirya dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/03/2007, 15h02
  5. [WebForms][User Controls] Problème pour accéder aux CSS
    Par BouB dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 04/12/2006, 16h35

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