Получить все выбранные элементы в списке (включая дубликаты)


У меня есть список, содержащий дубликаты элементов. Из того, что я понял, 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 2

2 ответа:

Я добавил свойство GUID в свой класс и произвольно распределил его перед добавлением в ObservableCollection. Пользователь не видит GUID, но ListBoxItem по-прежнему считается уникальным и теперь работает. Я оставлю этот вопрос открытым на некоторое время, если кто-то знает решение, которое не требует ненужного изменения класса.

При добавлении двух строк с одинаковым значением Listbox будет обрабатывать их одинаково. Лучше создать пользовательский класс, например

Композит класс { ключевые государственные строку{получить;набор;} общественная строку значение{получить;набор;} }

Свяжите список с этим классом. Таким образом, если вы установите Apple на два объекта, но ключ отличается, вы получите правильный результат

Ура! Винод