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 ListBox - ComboBox


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Binding ListBox - ComboBox
    Bonjour,


    J'ai une ComboBox avec des Items et je souhaiterai binder ces ComboBoxItems dans une ListBox pour n'afficher par exemple que le nom.

    Une idée ?

    Merci

  2. #2
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut
    Salut,

    tu as plusieurs possibilités,
    personnellement je fais ça (mais c'est pas le plus élégant!)

    - un évènement SelectionChanged sur la combobox
    - tu définis dans cet évènement l'ItemSource de ta ListBox en fonction du SelectedItem de ta Combo
    - au préalable, tu précises pour ta ListBox le DisplayMemberPath avec le nom de la propriété à afficher

  3. #3
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Vu que tu es en WPF, autant utiliser le Binding que d'utiliser des solutions Windows Forms. Regardes le billet de blog de David Rei intitulé WPF : Le Binding
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  4. #4
    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
    Utilise un DataTemplate pour afficher un Textblock qui va contenir le nom de tes éléments.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Utilise un DataTemplate pour afficher un Textblock qui va contenir le nom de tes éléments.
    Ok super ca fonctionne

    Maintenant comment faire pour rendre les éléments sélectionnable ?

    J'ai vu dans ton article :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBoxItem tvi = this.tv.ItemContainerGenerator.ContainerFromIndex(3) as ListBoxItem ;

    Qui permet de récupérer l'item mais cela ne la sélectionne pas.

  6. #6
    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
    Pour la sélection de ton ListBoxItem Tvi par le code, tu dois avoir :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    tvi.IsSelected = true;

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par binoo Voir le message
    Pour la sélection de ton ListBoxItem Tvi par le code, tu dois avoir :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    tvi.IsSelected = true;
    Ok mais sur quel évenement dois-je faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBoxItem tvi = this.tv.ItemContainerGenerator.ContainerFromIndex(3) as ListBoxItem ;
    Sur le MouseClick cela ne fonctionne pas.

  8. #8
    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
    Essaye ca sur le MouseLeftButtonDown:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ListBoxItem tvi = this.tv.ItemContainerGenerator.ContainerFromIndex(3) as ListBoxItem ;
    tvi.IsSelected = true;

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Le MouseLeftButtonDown ne réagit pas lors d'un click sur un ListBoxItem.

    Il y a certainement quelque chose que je fais mal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Window.Resources>
            <DataTemplate x:Key="ListBoxTemplate">
                <ListBoxItem>
                    <TextBlock Text="{Binding Name}" />
                </ListBoxItem>
            </DataTemplate>
        </Window.Resources>
     
        <Grid>
            <ListBox Margin="12,28,0,12" Name="listBoxItems" HorizontalAlignment="Left" Width="228" ItemsSource="{Binding Path=Items}" ItemTemplate="{StaticResource ListBoxTemplate}" MouseLeftButtonDown="listBoxItems_MouseLeftButtonDown">
            </ListBox>
     </Grid>
    Constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public AddItems(ItemsControl control)
    {
                InitializeComponent();
                this._control = control;
                this.listBoxItems.DataContext = _control;           
    }
     
    private void listBoxItems_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
                ListBoxItem tvi = this.listBoxItems.ItemContainerGenerator.ContainerFromIndex(0) as ListBoxItem;
                tvi.IsSelected = true;
    }

    Si je mets ContainerFromIndex(3), rien n'est renvoyé.

  10. #10
    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,

    J'ai pas du tout comprendre. Lorsque tu cliques sur un ListBoxItem, il le sélectionne par défaut, pas besoin de le récupérer et de faire IsSelected à true.

    Enfin si tu veux récupérer l'évènement MouseLeftButtonDown sur le ListBoxItem, tu peux faire comme ça :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            <ListBox Margin="12,28,0,12" Name="listBoxItems" HorizontalAlignment="Left" Width="228" ItemsSource="{Binding Path=Items}" ItemTemplate="{StaticResource ListBoxTemplate}" >
              <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                  <EventSetter Event="MouseLeftButtonDown" Handler="Lbi_MouseLeftButtonDown" />
                 </Style>
               </ListBox.ItemContainerStyle>
              </ListBox.ItemContainerStyle>
           </ListBox>

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void Lbi_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
      // on peut récupèrer le listBoxItem cliqué de cette manière
      ListBoxItem lbi = (ListBoxItem)sender;
     
    }

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    En fait depuis que j'ai ajouté un DataTemplate à ma ListBox, elle ne se comporte plus comme tel. Comme, par exemple, le clic sur un ListBoxItem.

Discussions similaires

  1. ListBox, ComboBox et ClientDataset.
    Par der§en dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/09/2006, 16h21
  2. Réponses: 2
    Dernier message: 17/07/2006, 17h28
  3. Listbox/ComboBox ??
    Par gdpasmini dans le forum MFC
    Réponses: 16
    Dernier message: 31/03/2006, 17h35
  4. [VB.NET] [ListBox / ComboBox] Label de l'item sélectionné?
    Par Giuseppe dans le forum Windows Forms
    Réponses: 5
    Dernier message: 14/12/2005, 14h22

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