【问题标题】:WPF Deleting item from listboxWPF从列表框中删除项目
【发布时间】:2011-04-04 19:03:12
【问题描述】:

我在 WPF 中有一个列表框,它使用 ItemSource 属性绑定到 ObservableCollection。这工作正常,显示正确的项目。

列表框(包含图像名称列表)在 SelectionChanged 事件上有一个事件处理程序,它使用所选图像的路径更新 Image 控件的源(有效地提供图像预览)。

我有以下代码在按钮的单击事件中从 lisbox 中删除一个项目:

if (lstLocal.SelectedIndex > -1)
{
    localImages.RemoveAt(lstLocal.SelectedIndex);
}

localImages 是ObservableCollection,lstLocal 是ListBox。

但是,当我删除所选项目时,会触发 SelectionChanged 事件。我的 SelectionChanged 事件处理程序利用了列表框上的 SelectedIndex 属性。我得到了例外 Index was out of range. Must be non-negative and less than the size of the collection. ,所以我猜测删除一个项目会导致 SelectedIndex 设置为 null(或负数)之类的东西?

有没有办法解决这个问题?我猜我有更好的方法来删除项目,或者我需要对我的 SelectionChanged 处理程序进行某种检查?

【问题讨论】:

    标签: c# wpf event-handling


    【解决方案1】:

    将您的 SelectionChanged 处理程序中的代码包装在一个

    中
    if (lstLocal.SelectedItem != null)
    {
    ...
    }
    

    【讨论】:

    • 谢谢。想想我在那里度过了一段难忘的时光!
    【解决方案2】:

    啊,ListBox 控件的经典烦恼。更改绑定集合时,可以清除选择并将滚动位置重置为顶部。当您必须从列表中选择项目并作为工作流程的一部分逐个编辑它们时,这真的很烦人。

    您可能希望在更改列表时保持“当前选定的项目”对象引用,以便在幕后发生变化时保留选择。然后,您还可以通过使用 ScrollIntoView 方法滚动回该项目来确保它是否存在。

    -1 的 SelectedIndex 表示没有选择任何内容,正如您已经记得的那样。这是在 SelectedItem 属性存在之前的 .NET 之前的古老保留。现在 SelectedItem 将在 SelectedIndex 为 -1 的同时为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 2020-12-07
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多