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 :

Comment Binder une DP avec un Texblock en XAML, au sein d'un même UC?


Sujet :

Silverlight

  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut Comment Binder une DP avec un Texblock en XAML, au sein d'un même UC?
    Bonjour à tous,

    Je bloque sur un problème tout simple mais j'arrive pas à trouver la syntaxe pour binder ma DP avec mon textblock.

    Mon tout se trouve au sein d'un même UserControl:

    PlayerInformation.xaml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Canvas x:Name="LayoutRoot" Background="Black">
        	<TextBlock x:Name="TxtBlPlayerName" Text="{Binding PlayerName}" Foreground="#FF8D7204" FontSize="10.667" Width="225" Height="15" ToolTipService.ToolTip="{Binding PlayerInformationNameDescription, Source={StaticResource Lang}}" />
    </Canvas>
    Dependency Property :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public string PlayerName
            {
                get { return (string)GetValue(PlayerNameProperty); }
                set { SetValue(PlayerNameProperty, value); }
            }
     
            public static readonly DependencyProperty PlayerNameProperty =
                DependencyProperty.Register("PlayerName", typeof(string), typeof(PlayerInformation), new PropertyMetadata(OnPlayerNameChanged));
    ...
    Actuellement je le fais au niveau du callback: OnPlayerNameChanged

    J'ai essayé avec Text="{Binding PlayerName}" mais ça ne fonctionne pas, j'ai essayé aussi avec un ElementName=this (sait-on jamais...)

    Je dois sans doute zappé quelque chose ?

    Merci pour vos lumières.

    Cordialement,

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Il faut bien le faire au niveau de la CallBack.

    La DP c'est pour l'exterieur (là où tu vas utiliser ton contrôle) pas pour binder à l'intérieur.

    Si tu veux vraiment faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TxtBlPlayerName.DataContext = this;

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut
    Avec le DataContext, ça fonctionne effectivement merci.

    Mon but c'est bien d'exposer mes DP à l'extérieur (d'où l'intérêt d'un UserControl), pour proposer un DataBinding. (Ex dans mon cas, binder une classe Player avec mon UC)

    À mon avis, utiliser le callback pose plusieurs problèmes:
    • Ce n'est pas un vrai binding ?
    • Pas de two-way?
    • Dans l'arbre des évènements, où se trouve-t-on avec le callback?


    Pour la dernière question, j'ai l'impression que ce n'est pas bien pris en compte au niveau de blend. Ainsi si j'initialise la DP à une valeur par défaut, le traitement du callback ne me semble pas effectué au niveau UI dans Blend, en conception (ex: modification d'une propriété UIElement en fonction de la valeur de la DP)

    Pareil, l'utilisation des Converter me paraît plus évident dans ce context de binding...

    Bref, la question que je me pose maintenant, c'est qu'elle est la manière la plus "propre" de gérer mes DP au niveau d'un UserControl? Est-ce qu'un DataContext = this ne vous paraît pas un peu bizarre?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par PPierre59 Voir le message
    À mon avis, utiliser le callback pose plusieurs problèmes:
    • Ce n'est pas un vrai binding ?
    • Pas de two-way?
    • Dans l'arbre des évènements, où se trouve-t-on avec le callback?
    Ben si ça reste du binding. Ceux qui vont utiliser tes propriétés vont faire {Binding...} c'est juste ce que tu veux faire avec cette valeur que tu fais en code.
    Le Two way fonctionne quand même.
    Je comprends pas la question.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut
    Désolé je découvre silverlight ...

    Dans mon esprit l'architecture est la suivante:



    Dans le cas (1),i.e. dans le context de mon UserControl, c'est là que je me pose la question du binding (de la DP avec le UIElement textbox).

    Soit je le fais en XAML, avec l'expression de binding ... à priori je peux le faire en n-way, utiliser des converter etc.

    Soit je le fais dans la callback (méthode) et par exemple je mettrai simplement un c# du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var ctrl = d as TextBox;
    ctrl.Text = e.NewValue as String;
    Dans ce cas, ce n'est pas à proprement parler du Binding, non? en tout cas c'est au mieux un push des données de la DP vers le control mais l'inverse n'est pas explicit ?

    Il doit y avoir une chose qui m'échappe.?

    Qu'est-ce qui est le mieux? Peut-être mon approche n'est pas la bonne ?

    Merci pour tes remarques, ça m'aide à avancer et à me poser encore des questions :p

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Je ne comprends pas pourquoi tu dis que ce n'est pas du binding.

    En (2) tu effectues bien un binding non ? Après derrière comment c'est gérer tu fais à ta sauce.

    Pour le TwoWay il faudrait aussi changer la valeur de ta DP lorsque le texte de ton TextBox change.

    Si tu veux absolument faire du binding interne tu peux mettre un x:Name à ton UserControl et binder le Text de ton TextBlock sur ta DB avec pour ElementName ce que tu as mis dans x:Name.

    Si tu veux pouvoir faire du TwoWay rajoute juste Mode=TwoWay et ça fonctionne.

    Et là tu n'as plus de callback. A toi de faire comme tu veux, les 2 méthodes fonctionnent.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut
    Ok, merci Skyounet.

    Dans tous les cas, fonctionnellement mon problème est résolu pour le reste c'est histoire de bien comprendre les choses.

    Merci pour tes exlications.

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

Discussions similaires

  1. comment binder un dataList avec une ArrayList
    Par inno007 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 03/03/2008, 17h55
  2. Réponses: 4
    Dernier message: 26/09/2005, 14h27
  3. comment filtrer une table avec deux criteres càd 2 colonnes
    Par athmane2dz dans le forum Bases de données
    Réponses: 7
    Dernier message: 28/07/2004, 15h25
  4. PL/SQL - Comment afficher une image avec HTP ?
    Par patmaba dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/07/2004, 09h28
  5. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 15h54

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