c# - 如何获取 WPF 列表框中选定项的索引?

标签 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);
    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/

相关文章:

c# - 菜单项和经典主题中的 WPF 复选框

c# - 自定义事务实现 - 线程和锁

c# - 在列表框中选择文本框项不会更改列表框的选定项

c# - 为什么我的 WPF 绑定(bind)不起作用?

c# - 在启动时显示默认 View (用户控件)

asp.net - Dropdownlist - 显示元素的数量

c# - BackgroundWorker 和剪贴板

c# - 如何创建和设置多态属性?

c# - self 更新、下载、解压和替换 Exe

c# - 如何将 native 窗口处理程序 (HWND) 嵌入到 C# WPF 应用程序中