2

我有一个包含重复项的 ListBox。根据我收集的信息,ListBox.SelectedItems只会返回重复项的第一个实例,但是当我想对用户选择的所有项目执行操作时,这会导致问题。当我选择多个重复项并调用ListBox.SelectedItems.Count时,我总是得到1. 有没有办法获取所有项目的索引,无论它们是否唯一?(ListBox 模式设置为 Multiple)。

添加了演示代码,表明同一项目被视为重复项。

xml:

<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。选择一个Appleand Pear,它会返回2

4

2 回答 2

0

我在我的类中添加了一个 GUID 属性,并在添加到 ObservableCollection 之前将其随机化。用户看不到 GUID,但 ListBoxItem 仍然被认为是唯一的,它现在可以工作了。如果有人知道不需要不必要地修改类的解决方案,我会暂时保留这个问题。

于 2012-07-04T23:20:13.393 回答
0

当您添加两个具有相同值的字符串时,Listbox 会将它们视为相同。最好创建一个自定义类 Like

类复合{公共字符串键{get;set;}公共字符串值{get;set;}}

将列表与此类绑定。这样,如果您将 Apple 设置为两个对象但键不同,您将获得正确的结果

干杯! 维诺德

于 2012-07-05T08:14:22.993 回答