Instead of several ListBox controls, if you can divide your collection into "n" smaller groups depending on how many sexers you need, you can combine them all through CompositeCollection into the same ListBox
So, for example, I will say that I have:
public partial class MainWindow : Window { public List<string> CollA { get; set; } public List<string> CollB { get; set; } public MainWindow() { InitializeComponent(); CollA = new List<string> {"A", "B", "C"}; CollB = new List<string> {"D", "E", "F"}; DataContext = this; } }
and I need a separator between CollA and CollB , then my xaml could be:
<ListBox> <ListBox.Resources> <CollectionViewSource x:Key="CollectionOne" Source="{Binding CollA}" /> <CollectionViewSource x:Key="CollectionTwo" Source="{Binding CollB}" /> </ListBox.Resources> <ListBox.ItemsSource> <CompositeCollection> <CollectionContainer Collection="{Binding Source={StaticResource CollectionOne}}" /> <ListBoxItem HorizontalContentAlignment="Stretch" IsEnabled="False" IsHitTestVisible="False"> <Rectangle Height="2" Fill="Gray" /> </ListBoxItem> <CollectionContainer Collection="{Binding Source={StaticResource CollectionTwo}}" /> </CompositeCollection> </ListBox.ItemsSource> </ListBox>
which should produce:

Now the elements are functional, and you can associate the SelectedItem with it and work with it as you wish, and also by checking the SelectedItem against the source collection, you can determine which selected element of the source list belongs to.
source share