获取ListBox中的所有选定项(包括重复项)

时间:2012-07-03 22:31:47

标签: c# silverlight listbox duplicates selecteditem

我有一个包含重复项的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。选择ApplePear,它将返回2

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

class Composit {public string Key {get; set;} public string Value {get; set;}}

使用此类绑定列表。这样,如果将Apple设置为两个对象但键不同,则会得到正确的结果

干杯!维诺德