我在WPF中有一个使用ItemSource属性绑定到ObservableCollection的列表框。这很好,显示正确的项目。
列表框(包含图像名称列表)在SelectionChanged事件上有一个事件处理程序,它使用所选图像的路径更新Image控件的源(有效地提供图像预览)。
我有以下代码从lisbox中删除项目,在按钮的点击事件中:
if (lstLocal.SelectedIndex > -1)
{
localImages.RemoveAt(lstLocal.SelectedIndex);
}
localImages是ObservableCollection
,lstLocal是ListBox
。
但是,当我删除所选项目时,会导致SelectionChanged事件触发。我的SelectionChanged事件处理程序使用列表框上的SelectedIndex属性。我得到了exe Index was out of range. Must be non-negative and less than the size of the collection.
,所以我猜测删除一个项会导致SelectedIndex设置为null(或负数)?
有解决这个问题的方法吗?我猜我有更好的方法来删除项目,或者我需要对SelectionChanged处理程序进行某种检查?
答案 0 :(得分:1)
将代码包装在
中的SelectionChanged处理程序中if (lstLocal.SelectedItem != null)
{
...
}
答案 1 :(得分:1)
更改列表时,您可能希望维护“当前选定的项目”对象引用,以便在幕后更改某些内容时可以保留选择。然后你也可以确保它存在,它通过使用ScrollIntoView方法滚动回那个项目而保持在视图中。
SelectedIndex为-1表示没有选择任何内容,因为您已经记住了。在SelectedItem属性存在之前,这是pre -.NET的一个古老的延续。现在SelectedItem将在SelectedIndex为-1的同时为null。