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
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
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
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
Utilise un DataTemplate pour afficher un Textblock qui va contenir le nom de tes éléments.
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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.
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
Sur le MouseClick cela ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ListBoxItem tvi = this.tv.ItemContainerGenerator.ContainerFromIndex(3) as ListBoxItem ;
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;
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Le MouseLeftButtonDown ne réagit pas lors d'un click sur un ListBoxItem.
Il y a certainement quelque chose que je fais mal.
Constructeur :
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>
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é.
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; }
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.
Partager