Получить все выбранные элементы в списке (включая дубликаты)
У меня есть список, содержащий дубликаты элементов. Из того, что я понял, ListBox.SelectedItems
вернет только первый экземпляр дубликата, но это вызывает проблемы, когда я хочу выполнить действие со всеми элементами, выбранными пользователем. Когда я выбираю несколько дубликатов и вызываю ListBox.SelectedItems.Count
, я всегда получаю 1
. Есть ли способ получить индексы всех элементов, независимо от того, уникальны они или нет? (Режим списка установлен в несколько).
Добавлен код повтора, демонстрирующий, что тот же элемент считается дубликат.
Xaml:
<Grid x:Name="LayoutRoot" Background="White">
<ListBox Height="288" HorizontalAlignment="Left" Margin="12,0,0,0" Name="listBox1" VerticalAlignment="Top" Width="276" SelectionMode="Multiple" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="313,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
Код:
ObservableCollection<string> fruits = new ObservableCollection<string>();
fruits.Add("Apple");
fruits.Add("Pear");
fruits.Add("Orange");
fruits.Add("Apple");
listBox1.ItemsSource = fruits ;
Я только что подключил событие button к этому:
MessageBox.Show(listBox1.SelectedItems.Count.ToString());
Выберите верхнюю часть Apple
и нажмите кнопку, она вернет 1
. Выберите оба Apples
, и он вернет 1
. Выберите Apple
и Pear
, он вернет 2
.
2 ответа:
Я добавил свойство GUID в свой класс и произвольно распределил его перед добавлением в ObservableCollection. Пользователь не видит GUID, но ListBoxItem по-прежнему считается уникальным и теперь работает. Я оставлю этот вопрос открытым на некоторое время, если кто-то знает решение, которое не требует ненужного изменения класса.
При добавлении двух строк с одинаковым значением Listbox будет обрабатывать их одинаково. Лучше создать пользовательский класс, например
Композит класс { ключевые государственные строку{получить;набор;} общественная строку значение{получить;набор;} }
Свяжите список с этим классом. Таким образом, если вы установите Apple на два объекта, но ключ отличается, вы получите правильный результат
Ура! Винод