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 d'initialisation d'une DependencyProperty dans un UserControl


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut Problème d'initialisation d'une DependencyProperty dans un UserControl
    Bonjour,

    J'ai créé un UserControl dans lequel je place entre autre un label.
    Ce que j'aimerai c'est que le développeur passe un chemin de fichier en paramètre de mon UserControl et que celui-ci affiche ce chemin précédé d'un message.

    Du coup, j'ai fait ça :
    - XAML du UserControl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <UserControl x:Class="MyNamespace.MyControl" x:Name="myControl">
     
        <Grid DataContext="{Binding Source=myControl}">
            [...]
            <Label x:Name="confFileLabel"
                   Grid.Row="1"
                   Grid.Column="1"
                   Content="{Binding ElementName=myControl, Path=CurrentConfigurationPath}" />
        </Grid>
    </UserControl>
    - Code du UserControl :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    namespace MyNamespace
    {
        public partial class MyControl : UserControl
        {
            public DependencyProperty CurrentConfigurationPathProperty = DependencyProperty.Register(
               "CurrentConfigurationPath", typeof(string), typeof(BannerControl));
     
     
            public BannerControl()
            {
                InitializeComponent();
            }
     
     
            public string CurrentConfigurationPath
            {
                get
                {
                    return (string)GetValue(CurrentConfigurationPathProperty);
                }
                set
                {
                    // Valid reference?
                    if (value == null || value.Trim().Length == 0)
                    {
                        throw new Exception("Invalid path(" + value + ")");
                    }
                    else
                    {
                        SetValue(CurrentConfigurationPathProperty, "Current configuration: " + value);
                    }
                }
            }
        }
    }
    - XAML où on crée le UserControl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <utils:MyControl x:Name="myControl1" CurrentConfigurationPath="c://toto"/>
    En gros, j'ai essayé de rajouter "Current configuration: " à la propriété saisie.
    Malheureusement, il ne m'écrit que "c://toto" et non pas "Current configuration: c://toto".

    Quelqu'un voit pourquoi ?

    Merci d'avance.

    PS : j'ai aussi essayé de rajouter le "préfixe" sur le get de ma propriété, mais c'est pareil...

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    Tu obtiens ce comportement, parce que lorsque tu définis une dependency property directement depuis le XAML (comme tu le fais), le framework ne passe pas par tes get/set.

    C'est pour cette raison qu'il est très fortement recommandé de ne mettre AUCUNE logique dans les accesseurs get/set. Si tu as besoin d'avoir cette logique, utilise plutôt les callbacks disponibles sur les DPs.
    www.japf.fr mon blog sur WPF et .Net

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ok, merci pour l'explication !

    Je vais tout simplement rajouté un label contenant mon préfixe en dur, et un autre contenant seulement le chemin vers mon fichier.
    Ca ira très bien.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Tiens, je m'étais fait la même remarque y a quelque temps. Faut passer par le "Coerce" de la dp, c'est ca?

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    Ouaip c'est ça
    www.japf.fr mon blog sur WPF et .Net

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Petite question supplémentaire pour la route.
    Plutôt que de devoir faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Label x:Name="confFileLabel"
                   Grid.Row="1"
                   Grid.Column="2"
                   Content="{Binding ElementName=bannerControl, Path=CurrentConfigurationFile}" />
    où pour chaque propriété que je veux binder je redonne l'ElementName, il me semble qu'on peut utiliser un DataContext ou un truc du genre.

    Comment je dois m'en servir ? (j'arrive pas à le faire marcher)
    Sachant que l'élément racine de mon UserControl est une Grid et qu'après j'ai directement mes éléments (labels, images, etc)

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

Discussions similaires

  1. Problème d'initialisation d'un booléen dans un UserControl
    Par -Jolan- dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/02/2007, 21h58
  2. Réponses: 7
    Dernier message: 12/03/2006, 21h18
  3. [MySQL] Problème d'initialisation de la valeur dans une table
    Par priazu dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/02/2006, 02h00
  4. [VBA] Problème récup texte d'une cellule dans un tableau
    Par Marco le Pouillot dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/01/2006, 17h06
  5. Réponses: 10
    Dernier message: 24/09/2005, 19h19

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