如何获取wpf列表框中所选项目的索引
本文关键字:选项 项目 索引 列表 何获取 获取 wpf | 更新日期: 2023-09-27 18:14:53
在您将此问题标记为重复或建议使用Items之前。索引,请做以下操作:
public MainWindow()
{
InitializeComponent();
var A = new object();
var B = new object();
var C = new object();
lbItems.Items.Add(A);
lbItems.Items.Add(B);
lbItems.Items.Add(C);
lbItems.Items.Add(A);
lbItems.Items.Add(B);
lbItems.Items.Add(C);
}
private void lbItems_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MessageBox.Show(lbItems.Items.IndexOf(lbItems.SelectedItems[0]).ToString());
}
然后双击第四个元素(你将得到0而不是3)。
如何获得选定项目索引的列表?
这是由于两次向列表中添加相同的对象造成的。ListBox
控制器无法区分它们。解决这个问题的一种方法是将每个项包装在另一个类中:
lbItems.Items.Add(new WrappedThing((a));
lbItems.Items.Add(new WrappedThing((b));
lbItems.Items.Add(new WrappedThing((a));
lbItems.Items.Add(new WrappedThing((b));
…这意味着列表中的每个项目都是唯一的,即使它们包装的项目可能不是。请注意,任何数据模板或绑定也必须更改以支持此功能,尽管您可以使用单个全局DataTemplate
来实现此功能。
WrappedThing
看起来像这样:
class WrappedThing<T>
{
public WrappedThing(T thing)
{
Thing = thing;
}
public T Thing { get; private set; }
}
(注意:这是从我的答案复制到另一个问题,因为答案是有用的,但问题略有不同。)
进一步我的评论("它得到对象A的第一个索引是0"),
int j = 0;
for (int i = 0; i < lbItems.Items.Count; i++)
{
if (lbItems.Items[i] == lbItems.SelectedItems[0])
j++;
}
MessageBox.Show(lbItems.Items.IndexOf(lbItems.SelectedItems[0]).ToString()
+ string.Format("'r'nThere are {0} occurences of this object in this list", j));