我有一个包含重复项的ListBox。根据我收集的内容,ListBox.SelectedItems
将只返回重复的第一个实例,但是当我想对用户选择的所有项目执行操作时,这会导致问题。当我选择多个重复项并拨打ListBox.SelectedItems.Count
时,我总是得到1
。有没有办法获取所有项目的索引,无论它们是否唯一? (ListBox模式设置为Multiple)。
添加了重复代码,证明同一项目被视为重复。
的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 ;
我刚刚将按钮事件连接到此:
MessageBox.Show(listBox1.SelectedItems.Count.ToString());
选择顶部Apple
并点击该按钮,它将返回1
。同时选择Apples
,它将返回1
。选择Apple
和Pear
,它将返回2
。
答案 0 :(得分:0)
我在我的类中添加了一个GUID属性,并在添加到ObservableCollection之前将其随机化。用户没有看到GUID,但ListBoxItem仍然被认为是唯一的,现在它可以正常工作。我会稍微提出这个问题,因为有人知道一个不需要不必修改类的解决方案。
答案 1 :(得分:0)
当您添加两个具有相同值的字符串时,Listbox会将它们视为相同。最好创建一个自定义类,如
class Composit {public string Key {get; set;} public string Value {get; set;}}
使用此类绑定列表。这样,如果将Apple设置为两个对象但键不同,则会得到正确的结果
干杯!维诺德