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 :

ListBox avec CheckBox: click sur un item


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut ListBox avec CheckBox: click sur un item
    Bonjour,

    J'ai un ListBox que je remplie de CheckBox:

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim k As Integer = 0
    For Each element In listeNumVol 'listeNumVol est une List(of string)
    Dim checkboxlist As New CheckBox
    checkboxlist.Name = "checkboxlist" & k
    checkboxlist.Content = element
    lstVol.Items.Add(checkboxlist)
    k += 1
    Next

    Ensuite je fais un traitement lorsque un item (checkbox) est sélectionné:
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub lstVol_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles lstVol.SelectionChanged
     
            'Mon traitement
     
        End Sub

    Or cet évènement n'est jamais réalisé car un click sur un checkbox provoque le changement d'état (coché/décoché) et non pas la sélection de la ligne. C'est comme si je ne sélectionnais pas un élément de la listbox.

    J'ai personnalisé l'apparence des listbox. Je pensais que ça pouvais venir de là mais non (j'ai essayé sans le style appliqué).

    Donc, comment faire en sorte qu'un click sur un checkbox provoque la sélection de l'item/la ligne?

    Merci, j'espère avoir été clair.

  2. #2
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Ce que tu peux faire c'est utiliser un binding comme expliqué sur cette page entre le ischecked de ta checkbox et la propriété IsSelected de ton listboxitem.

    Tu as un exemple pour faire le binding depuis le code ici : http://www.developpez.net/forums/d10...e-mode-twoway/
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Sinon, regarde dans le Bag'O'Trick: il y a un contrôle RadioButtonList qui est en fait une ListBox dont les items sont des RadioButtons, c'est donc très similaire à ce que tu veux faire

  4. #4
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    J'ai regardé les différents liens que vous avez donné.
    J'ai réussi à "bidouiller" un checkboxlist:

    Code xaml : 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
    37
    38
    39
    40
     
    <Style x:Key="CheckBoxListStyle" TargetType="ListBox">
                <Style.Resources>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="ListBoxItem">
     
                                    <Border 
                                        Name="Border"
                                        BorderBrush="#cee7fd" 
                                        BorderThickness="1" 
                                        CornerRadius="4"
                                        Padding="2" 
                                        Margin="1" 
                                        SnapsToDevicePixels="true">
                                        <CheckBox IsChecked="{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay}" >
                                            <ContentPresenter Margin="2,0,0,0" />
                                        </CheckBox>
                                    </Border>
     
                                    <ControlTemplate.Triggers>
                                        <Trigger Property="IsMouseOver" Value="True">
                                            <Setter TargetName="Border" Property="Background">
                                                <Setter.Value>
                                                    <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                                                        <GradientStop Color="#dff7b8" Offset="0" />
                                                        <GradientStop Color="#bdd794" Offset="1" />
                                                    </LinearGradientBrush>
                                                </Setter.Value>
                                            </Setter>
                                        </Trigger>
                                    </ControlTemplate.Triggers>
     
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </Style.Resources>
            </Style>

    Je le remplie désormais comme ceci:
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each element In listeNumVol
    lstVol.Items.Add(element)
    Next

    Avec ça, je peux bien sélectionner, cocher/décocher un item. L'évènement SelectionChanged est bien déclenché.

    Seulement maintenant, la collection d'item du listbox n'est plus une collection de checkbox mais de string (listeNumVol est une collection de type string).
    Or dans mon traitement SelectionChanged, je comptais le nombre de checkbox coché dans les items du listbox, chose que je ne peux plus faire (ou que je ne sais pas faire )

    Finalement, il peut-être un autre de moyen de faire.

    Je cherche maintenant comment accéder au checkbox de la listbox afin de faire le traitement souhaité (on doit bien pouvoir y accéder quelque part puisqu'ils sont affichés) ou bien trouver une nouvelle façon de faire.

  5. #5
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Dans un Listbox tu as une propriété SelectedItem qui te fournira les différents éléments sélectionnés
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  6. #6
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Avec SelectedItem, j'obtient un string et non pas un checkbox

  7. #7
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Euh oui, tous les strings sélectionnés de la collection...
    Tu voudrais faire quoi avec la checkbox ?
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  8. #8
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Bon, un petit résumé s'impose

    Au début:
    Dans un listbox, j'ajoute une collection de checkbox avec un content de type string.
    Problème: lorsque je click sur un checkbox, l'évènement SelectionChanged ne se produit pas. Je ne peux pas faire mon traitement qui consiste à compter le nombre de checkbox coché.

    Après modification:
    J'ai modifié le template du listboxitem, qui contient une bordure dans lequel il y a un checkbox qui est binder de manière à ce qu'une sélection d'un item coche le chekbox.
    Désormais, je n'ajoute plus une collection de checkbox mais de string. Cette collection de string est la même qu'avant!

    J'ai bien ce que je veux, seulement si je récupère le collection d'items du listbox, j'ai une collection de string donc je ne peux plus compter le nombre de checkbox coché.
    Soit je ne sais pas comment récupérer cette information, soit je m'y suis mal pris dans la construction du template.

  9. #9
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Ok, si je ne m'abuse tu as :

    Nombre d'items sélectionnés = SeletectedItem.Count = nombre de checboxes cochées...
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  10. #10
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Citation Envoyé par jmix90 Voir le message
    Ok, si je ne m'abuse tu as :

    Nombre d'items sélectionnés = SeletectedItem.Count = nombre de checboxes cochées...
    Euh...effectivement, honte à moi

  11. #11
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Citation Envoyé par yonpo Voir le message
    Euh...effectivement, honte à moi
    bah non !
    Cool si tu as pu résoudre ton pb !
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  12. #12
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Citation Envoyé par jmix90 Voir le message
    bah non !
    Cool si tu as pu résoudre ton pb !
    Ca faisait quand même un bon bout de temps que je me prennais la tête...

    En tout cas merci à toi.

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

Discussions similaires

  1. treeview avec checkbox que sur certains noeuds
    Par petitours dans le forum C#
    Réponses: 4
    Dernier message: 02/11/2013, 19h51
  2. [Dojo] Obtenir le noeuds XML au click sur un item d'un Tree
    Par Jim_Nastiq dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 01/10/2009, 14h51
  3. Click sur un Item d'une ListBox
    Par Morgoth818 dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 07/05/2009, 12h35
  4. Avec un click sur image, faire précédente
    Par Bydouille dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 20/10/2007, 13h20
  5. Click sur listbox1.items[1]
    Par NapsterVB dans le forum Delphi
    Réponses: 1
    Dernier message: 29/12/2006, 12h15

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