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

Silverlight Discussion :

Binder une DP sur son propre UserControl


Sujet :

Silverlight

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Points : 97
    Points
    97
    Par défaut Binder une DP sur son propre UserControl
    Bonjour,

    J'ai crée un userControl avec ses dependencyProproties et je souhaiterais binder ma DP à une propriété Text d'une TextBox.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <UserControl x:Class="SilverlightControl1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="400" Height="300"> 
        <Grid x:Name="LayoutRoot" Background="White"> 
            <TextBlock Text="Hello, World" Name="tb" FontSize="{Binding MySize}"/> 
        </Grid> 
    </UserControl>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <l:SilverlightControl1 x:Name="kuku" MySize="40"/>
    J'ai un peu tout essayé mais rien ne marche.

    J'ai cherché sur google et j'ai trouvé un billet parlant d'un bug.

    Voici le billet : http://blogs.microsoft.co.il/blogs/t...-0-beta-2.aspx

    Je voulais savoir si le "Bug", s'il en est un, a été corrigé et s'il n'y a pas une solution plus propre pour effectuer le binding souhaité.

    Merci de votre réponse,
    Steven

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Pourquoi tu le fais pas à la main dans la set de ta DP ?

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    set
    {
       [...]
       tb.FontSize = value;
    }

    Ou même dans le PropertyChangedCallback de ta DP ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre régulier
    Étudiant
    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Points : 97
    Points
    97
    Par défaut
    En effet cela fonctionne mais je voulais faire mon Binding via mon XAML

    C'est plus par curiosité que je demandais car normalement ce devrait être simple de Binder une propriété sur son propre userControl.

    Mais apparament ca ne n'est pas si évident que cela

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <UserControl x:Class="SilverlightControl1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="400" Height="300"
        Name="self"> 
        <Grid x:Name="LayoutRoot" Background="White"> 
            <TextBlock Text="Hello, World" Name="tb" FontSize="{Binding MySize, ElementName=self}"/> 
        </Grid> 
    </UserControl>

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Points : 97
    Points
    97
    Par défaut
    Cela ne fonctionne pas ;(

    J'ai l'erreur suivante :

    {System.Windows.Markup.XamlParseException: Invalid attribute value {Binding MySize, ElementName=self} for property FontSize.
    J'ai également essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FontSize="{Binding ElementName=self, Path=MySize}"
    Et j'ai le même type d'erreur :

    {System.Windows.Markup.XamlParseException: Invalid attribute value {Binding ElementName=self, Path=MySize} for property FontSize.
    J'ai bien nommé le UserControl "self' pourtant.

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Normal, les 2 syntaxes sont équivalentes.
    La solution que j'ai donnée devrait marcher en WPF, pour Silverlight je ne sais pas trop s'il y a des différences à ce niveau là...

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Points : 97
    Points
    97
    Par défaut
    Merci quand même

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Normal, les 2 syntaxes sont équivalentes.
    La solution que j'ai donnée devrait marcher en WPF, pour Silverlight je ne sais pas trop s'il y a des différences à ce niveau là...
    Nan on peut pas binder sur un élément

    En WPF le this.DataContext = this fonctionne, mais pas en Silverlight par contre.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 60
    Points
    60
    Par défaut je pense que tout ce joue dans la definition de ta DP
    bon voici ce qu'il faut faire pour rendre le binding effectif:
    tu définie une proprièté qui correspond a ta dp voici l'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public String Description
            {
                get
                {
                    return (String)GetValue(DescriptionProperty);
                }
                set
                {
                    SetValue(DescriptionProperty, value);
                }
            }
    ensuite tu enregistre ta dépendence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     public readonly DependencyProperty DescriptionProperty =
                DependencyProperty.Register("Description", typeof(String), typeof(Card), new PropertyMetadata(new PropertyChangedCallback(onDescriptionChanged)));
    et enfin tu donnes la définition du handler onDescriptionChanged
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public static void onDescriptionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs dp)
            {
                Card a = obj as Card;
                a.Description = dp.NewValue as string;
            }
    et là je crois que ça va marcher .

Discussions similaires

  1. [XL-2003] Modifier une macro pour qu'elle s'exécute sur son propre fichier
    Par Vadorblanc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2013, 19h21
  2. Comment uploader une image sur son propre serveur avec l'éditeur nicedit ?
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/04/2009, 13h01
  3. Pb sur son propre reseau
    Par babemagus dans le forum Sécurité
    Réponses: 1
    Dernier message: 28/09/2006, 18h26
  4. Réponses: 1
    Dernier message: 18/05/2006, 16h00

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