Как обработать множественный выбор в ListBox WPF C#?
Каким образом можно обработать множественный выбор элементов в ListBox, т.к SelectionIndexChanged срабатывает только при выборе одного элемента в ListBox?
Ответы (1 шт):
Автор решения: VladD
→ Ссылка
Ну вот вам пример.
XAML:
<Grid Name="MainGrid">
<ListBox SelectionChanged="OnSelectionChanged" ItemsSource="{Binding}"
SelectionMode="Multiple" Name="LB"/>
<TextBlock x:Name="TB" VerticalAlignment="Bottom" Background="LightGray"/>
</Grid>
Code-behind:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new[] { 1, 2, 3, 4, 5 };
OnSelectionChanged(null, null);
}
void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedItems = LB.SelectedItems.Cast<int>();
var s = string.Join(", ", selectedItems);
if (s == "")
s = "(none)";
TB.Text = $"Selected items: {s}";
}
}
Получается вот что:
Если вы используете MVVM и хотите обрабатывать выделение на уровне VM, лучше завести свойство IsSelected в ItemVM, переопределить стиль контейнера
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
и подписаться на изменение IsSelected в ItemVM. Но это может оказаться и не вполне хороший путь, т. к. выбранные элементы всё же визуальное свойство.
