在将此问题标记为重复或建议使用 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);
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));
... 这意味着列表中的每个项目都是唯一的,即使它们包装的项目可能不是。请注意,任何数据模板或绑定(bind)也必须更改以支持此功能,尽管您可以使用单个全局 DataTemplate
来完成此操作。
WrappedThing
看起来像这样:
class WrappedThing<T>
{
public WrappedThing(T thing)
{
Thing = thing;
}
public T Thing { get; private set; }
}
(注意:这是从我对另一个问题 here 的回答中复制的,因为答案很有用,但问题略有不同。)
关于c# - 如何获取 WPF 列表框中选定项的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16689029/