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 qui ne fonctionne plus dès qu'on effectue une action


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier Avatar de annalady
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 169
    Points : 88
    Points
    88
    Par défaut Binding qui ne fonctionne plus dès qu'on effectue une action
    Hello

    Plusieurs fois j'ai remarqué quelque chose de bizarre : quand on utilise du binding pour modifier les propriétés d'un contrôle, ce binding ne fonctionne plus dès qu'on change la propriété à la mano.

    Un exemple pour que vous voyiez de quoi je parle : j'ai une ListBox qui contient un ensemble de CheckBox.

    Le DataTemplate de la ListBox est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <DataTemplate>
    <CheckBox Content="Test"
    IsChecked="{Binding Path=IsChecked, ElementName=chkCheckAll, Mode=OneWay}" />
    </DataTemplate>
    Ensuite j'ai une case à cocher à part qui permet de cocher/décocher toutes les cases de la ListBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <CheckBox x:Name="chkCheckAll" Content="Tout cocher / décocher" />
    Ca fonctionne bien : quand ma CheckBox chkCheckAll est cochée, toutes les cases à cocher de la ListBox deviennent automatiquement cochées, pareil quand elle est décochée.

    Seulement voilà, si je coche moi-même l'une des cases de la ListBox, elle ne devient plus cochée/décochée quand je coche la case chkCheckAll !

    Y'a pas moyen de faire "persister" le binding ?

  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
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Peut-être en ajoutant :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <DataTemplate>
    <CheckBox Content="Test"
    IsChecked="{Binding Path=IsChecked, ElementName=chkCheckAll, Mode=OneWay, UpdateSourceTrigger=Explicit}" />
    </DataTemplate>

    Sinon via le code c#, pour mettre à jour un binding, tu peux utiliser :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var bindingExpression =
    BindingOperations.GetBindingExpression(dependencyObject, TextBlock.TextProperty);
    binding.UpdateSource();
    binding.UpdateTarget();
    voir GetBindingExpression sur la msdn

  3. #3
    Membre régulier Avatar de annalady
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 169
    Points : 88
    Points
    88
    Par défaut
    Salut Binoo

    Je viens d'essayer avec UpdateSourceTrigger=Explicit, ça ne fonctionne toujours pas

    Passer par le code m'embête un peu vu que j'aime bien faire le max de trucs en XAML. Le code que tu proposes, j'imagine qu'il faut le mettre dans les évènements "checked" et "unchecked" de la CheckBox chkCheckAll ?

    Je vais essayer quand même

  4. #4
    Membre régulier Avatar de annalady
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 169
    Points : 88
    Points
    88
    Par défaut
    J'y arrive même pas

    Je comprends que la DependencyProperty soit CheckBox.IsChecked, mais le DependencyObject c'est censé être quoi ? J'ai tenté d'utiliser la CheckBox chkCheckAll, puis la checkBox cochée, mais à chaque fois mon object bindingExpression est nul

  5. #5
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Ça fonctionne si tu mets UpdateSourceTrigger=Explicit et si tu passes en Mode=TwoWay en fait

  6. #6
    Membre régulier Avatar de annalady
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 169
    Points : 88
    Points
    88
    Par défaut
    Binoo, une fois de plus tu es mon sauveur

    Merci mille fois mon vieux, ça marche nickel !

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

Discussions similaires

  1. Binding qui ne fonctionne pas dans la source d'une image?
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 07/09/2011, 15h55
  2. [Problème Matériel] Alimentation qui ne fonctionne plus
    Par kromartien dans le forum Composants
    Réponses: 15
    Dernier message: 26/03/2007, 19h10
  3. imprimante qui ne fonctionne plus
    Par flo456 dans le forum Hardware
    Réponses: 5
    Dernier message: 01/09/2006, 17h35
  4. function qui ne fonctionne plus après fractionnement Base
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 25/05/2006, 20h37
  5. Forum qui ne fonctionne plus
    Par vins25 dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 18/02/2006, 17h54

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