C# 如何在WPF'中获取所选项目的索引;什么是列表框?
在将此问题标记为重复问题或建议使用Items.IndexOf之前,请执行以下操作:C# 如何在WPF'中获取所选项目的索引;什么是列表框?,c#,wpf,listbox,indexing,selection,C#,Wpf,Listbox,Indexing,Selection,在将此问题标记为重复问题或建议使用Items.IndexOf之前,请执行以下操作: 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);
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)
如何获取所选项目索引列表?关于我的评论(“获取对象a的第一个索引,即0”)
intj=0;
对于(int i=0;i
这是由于您将同一对象添加到列表中两次造成的。列表框
控件无法区分它们。解决此问题的一种方法是将每个项包装到另一个类中:
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; }
}
类包装
{
公共包装(T类物品)
{
事物=事物;
}
公共T对象{get;私有集;}
}
(注意:这是从我对另一个问题的回答复制过来的,因为答案很有用,但问题略有不同。)经过多次混淆之后(我相信您会分享)。我认为它得到的是object
A的第一个索引,即0。您可以创建一个循环来获取a
@Sayse的所有索引:您是正确的-列表框将拾取第一个索引(此外,如果您单击第四个元素,第一个和第四个元素通常都会高亮显示)。我在@DanPuzey上发布了一个解决方案-您的解决方案可能也是这个问题的答案。注意:我不打算将此作为对所问问题的回答,而是进一步澄清
class WrappedThing<T>
{
public WrappedThing(T thing)
{
Thing = thing;
}
public T Thing { get; private set; }
}