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 :

Binding de Button.Content dans un DataTemplate


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Binding de Button.Content dans un DataTemplate
    Bonjour à tous !

    Mon problème est assez complexe : j'ai une ListView, contenant une GridView contenant eux-mêmes plusieurs GridViewColumnHeader. Parmi ceux-ci, il y en a un où je définis un template pour la cellule :
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    <GridViewColumn x:Name="GridViewColumnClient" Header="Client" Width="100" CellTemplate="{DynamicResource CelluleClientTemplate}"/>

    Les éléments de la ListView sont des objets de la classe Facture qui contient entre autres la propriété public int NumeroClient { get; set; }.

    Et le template est défini comme suit :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <DataTemplate x:Key="CelluleClientTemplate">
        <Button Content="{Binding NumeroClient}" DataContext="{Binding NumeroClient}" ToolTip="Voir les détails de ce client"  Click="ListViewFactureItem_Click">
        </Button>
    </DataTemplate>

    Et donc voilà le problème, le binding fonctionne bien pour DataContext, mais pas pour Content.

    À quoi peut être dû ce problème ?


    Merci pour votre temps.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Citation Envoyé par jo_le_coco
    Et donc voilà le problème, le binding fonctionne bien pour DataContext, mais pas pour Content.
    Tu définis le DataContext de ton bouton avec la propriété NumeroClient de type integer. A partir de là, le binding est en rapport avec ce DataContext. Donc quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content="{Binding NumeroClient}"
    il cherche une propriété NumeroClient appartenant au DataContext qui est déjà NumeroClient .

    Il faut donc si tu décides de redéfinir le Datacontext, faire ceci :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <DataTemplate x:Key="CelluleClientTemplate">
        <Button Content="{Binding }" DataContext="{Binding NumeroClient}" ToolTip="Voir les détails de ce client"  Click="ListViewFactureItem_Click">
        </Button>
    </DataTemplate>
    Cela veut dire que la propriété Content du bouton récupère le DataContext.


    Tu aurais pu aussi ne pas redéfinir le DataContext du bouton qui par défaut est ton objet Facture, et directement binder la propriété NumeroClient au Content. Soit :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <DataTemplate x:Key="CelluleClientTemplate">
        <Button Content="{Binding NumeroClient}" ToolTip="Voir les détails de ce client"  Click="ListViewFactureItem_Click">
        </Button>
    </DataTemplate>

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Par défaut
    J'ai 2 idée a te faire tester

    La première simple:
    Ton DataContext étant défini, et vu que la valeur bindé sur le Content est la même que sur ton DataContext, ton Binding du Content devrait normalement ressemblé a ceci:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <DataTemplate x:Key="CelluleClientTemplate">
        <Button Content="{Binding}" DataContext="{Binding NumeroClient}" ToolTip="Voir les détails de ce client"  Click="ListViewFactureItem_Click">
        </Button>
    </DataTemplate>

    Si cela ne fonctionne pas, seconde solution:
    Et si tu mettait ton DataContext une strate au dessus:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <DataTemplate x:Key="CelluleClientTemplate">
        <Grid DataContext="{Binding NumeroClient}">
            <Button Content="{Binding NumeroClient}"  ToolTip="Voir les détails de ce client"  Click="ListViewFactureItem_Click">
            </Button>
        </Grid>
    </DataTemplate>

    La pareil, si ça ne marche, laisse le Binding du Content comme dans la solution 1.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Citation Envoyé par Monkey56
    Et si tu mettait ton DataContext une strate au dessus:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <DataTemplate x:Key="CelluleClientTemplate">
        <Grid DataContext="{Binding NumeroClient}">
            <Button Content="{Binding NumeroClient}"  ToolTip="Voir les détails de ce client"  Click="ListViewFactureItem_Click">
            </Button>
        </Grid>
    </DataTemplate>

    La pareil, si ça ne marche, laisse le Binding du Content comme dans la solution 1.
    Dans ce cas là, tu seras dans le même cas de figure que jo_le_coco. Le bouton ne trouvera pas de propriété NumeroClient dans son DataContext qui est déjà NumeroClient.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Par défaut
    Citation Envoyé par binoo Voir le message
    Dans ce cas là, tu seras dans le même cas de figure que jo_le_coco. Le bouton ne trouvera pas de propriété NumeroClient dans son DataContext qui est déjà NumeroClient.
    Je m'en doute, pour ça que j'ai précisé après de mettre le Binding de Content comme la solution 1 ^^

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ah effectivement ça marche parfaitement avec la solution {Binding}

    Merci à vous

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

Discussions similaires

  1. Binding dans un DataTemplate
    Par jmnicolas dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 19/10/2011, 22h00
  2. Binding d'un Button.Content via un converter
    Par lutecefalco dans le forum Silverlight
    Réponses: 5
    Dernier message: 07/09/2011, 17h59
  3. Stretch une grid dans un button.content !
    Par neoncyber dans le forum Silverlight
    Réponses: 2
    Dernier message: 14/03/2011, 21h34
  4. Binding d'un DataObject dans un DataTemplate
    Par rockeye dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 18/05/2009, 11h18
  5. Binding avec ElementName dans un DataTemplate
    Par annalady dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 23/06/2008, 14h00

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