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] Valeur par défaut d'une DependencyProperty n'appelle pas le callback


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut [WPF] Valeur par défaut d'une DependencyProperty n'appelle pas le callback
    Bonjour à tous,

    J'ai créé un UserControl personnel qui représente une sorte de boîte de dialogue (cf pièce jointe).

    En particulier, il y a un Label (TitleLabel) pour le titre, et une TextBox (AmountOfMoneyField) pour y écrire.

    Je voulais personnaliser ces éléments à partir du XAML, du coup j'en ai fait des dependency property comme ceci :

    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
    23
    24
    25
    26
     
        public partial class TransferDialog : UserControl
        {
            private const String  DefaultText   = "Amount to transfer";
            private const Decimal DefaultAmount = 0m;
     
            public static readonly DependencyProperty TitleProperty =
                DependencyProperty.Register("Title", typeof(String), typeof(TransferDialog),
                                            new UIPropertyMetadata(DefaultText,
                                                                   new PropertyChangedCallback(OnTitleChanged)));
     
            public static readonly DependencyProperty ValueProperty =
                DependencyProperty.Register("Value", typeof(Decimal), typeof(TransferDialog),
                                            new UIPropertyMetadata(DefaultAmount, new PropertyChangedCallback(OnValueChanged)));
     
            public String Title
            {
                get { return GetValue(TitleProperty) as String; }
                set { SetValue(TitleProperty, value); }
            }
     
            public Decimal Value
            {
                get { return (Decimal) GetValue(ValueProperty); }
                set { SetValue(ValueProperty, value); }
            }

    Title pour le titre
    Value pour la valeur par défaut dans la textbox

    avec les callbacks qui vont bien pour notifier du changement :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void OnTitleChanged(DependencyObject o, DependencyPropertyChangedEventArgs args)
            {
                (o as TransferDialog).TitleLabel.Content = args.NewValue.ToString();
            }
     
            public static void OnValueChanged(DependencyObject o, DependencyPropertyChangedEventArgs args)
            {
                (o as TransferDialog).AmountOfMoneyField.Text = args.NewValue.ToString();
            }

    Le problème c'est que lors de la création de mon UserControl (TransferDialog), les valeurs par défaut ont bien été affectées, mais les callbacks ne sont pas appelés (qui permettent de dire au Label TitleLabel et à la TextBox AmountOfMoneyField).
    Du coup je sais pas comment transmettre automatiquement la valeur par défaut aux éléments qui composent mon UserControl, sans l'écrire à la main encore une fois !

    Merci d'avance pour vos réponses!
    Images attachées Images attachées  

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

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

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


    Et si tu faisais un binding directement sur ces deux propriétés ? Pas besoin de callback dans ce cas... . Par exemple (je tape sans tester) :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <Label Content={Binding Path=Title, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type myNS:TransferDialog }}}" />
    avec myNS étant l'accesseur du namespace de ton userControl...



    Edit: mon premier code était faux

    PS: une feuille de synthèse sur les bindings est disponible en tapant Feuille de synthèse sur les bindings en WPF sur Google !
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  3. #3
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Ah bah pas bête, j'y avais pas pensé

    Et pas mal la feuille pense bête, merci encore

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/02/2006, 20h53
  2. Sélection valeur par défaut dans une zone de liste
    Par Cécile154 dans le forum IHM
    Réponses: 2
    Dernier message: 15/02/2005, 18h20
  3. Réponses: 2
    Dernier message: 06/07/2004, 17h46
  4. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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