Выбор в Listview множества индексов

#wpf

#wpf

Вопрос:

Для ListView, где я могу выбрать несколько элементов из списка, мой метод для выбранного индекса будет вызываться, если я выбираю один элемент. Но я выбираю более одного за раз, мой метод ‘TheSelectedIndex’ не вызывается. Я хочу, чтобы это вызывалось для любого типа выбора. ноль элементов, 1 элемент или более 1 элемента. Как мне это настроить для этого? Большое вам спасибо!

 <ListView
           SelectionMode="Multiple"
           SelectedIndex="{Binding Path="TheSelectedIndex}"
           ItemsSource="{Binding Path=Object}">
  

Комментарии:

1. вау, 14 вопросов и ни один не принят! примите некоторые ответы, если вы хотите получить ответ

Ответ №1:

Один из способов справиться с этим — убедиться, что тип, к которому вы привязываете свойство ItemsSource, предоставляет свойство IsSelected. Это может означать перенос этого типа в пользовательский класс ViewModel, который просто предоставляет базовый тип и добавляет свойство IsSelected.

Как только вы введете концепцию состояния выбора для отдельных элементов в связанной коллекции, вы сможете использовать ListView.Событие SelectionChanged и некоторый код для доступа к view-model (предполагается, что вы используете MVVM, что, я думаю, так и есть, учитывая ваши привязки):

В XAML…

 <ListView SelectionChanged="ListView_SelectionChanged" />
  

В коде-за…

 private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var vm = (MyViewModel)DataContext;
    var selectedItems = ((ListView)sender).SelectedItems.Cast<SomeType>();        

    vm.SetSelectedItems(selectedItems);
}
  

В представлении-модель…

 public void SetSelectedItems(IEnumerable<SomeType> selectedItems)
{
    /* Remove items that were previously selected but no longer are selected */
    var currentlySelectedItems = MyItems.Where(i => i.IsSelected == true);
    foreach (var previouslySelectedItem in currentlySelectedItems.Except(selectedItems))
        previouslySelectedItem.IsSelected = false;

    /* Set the selection state on all currently/newly selected items */
    foreach (var selectedItem in selectedItems)
        selectedItem.IsSelected = true;

    NotifyOfPropertyChanged(() => MyItems);
}
  

В SomeType, который является оболочкой view-model для каждого элемента в коллекции…

 public bool IsSelected { get; set; }
  

Ответ №2:

Вы должны использовать событие SelectionChanged