2011-04-04 151 views
1

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

列表框(包含图像名称列表)在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处理程序进行某种检查?

回答

1

裹的代码在你的SelectionChanged处理程序在

if (lstLocal.SelectedItem != null) 
{ 
... 
} 
+0

谢谢。想想我在那里有一段健忘的时刻! – AndrewC 2011-04-04 19:13:23

1

啊,ListBox控件的一个经典的烦恼。当更改装订集合时,它可以清除选择并将滚动位置重置到顶部。当您必须从列表中选择项目并将其作为工作流程的一部分进行零星编辑时,确实令人恼火。

更改列表时,您可能希望维护“当前选定的项目”对象引用,以便在幕后更改内容时保留选择。然后,您还可以确保它存在,通过使用ScrollIntoView方法滚动回到该项目,它保持在视图中。

-1的SelectedIndex表示没有被选中,因为您已经记住了。这是来自pre-.NET的一个古老的延续,在SelectedItem属性存在之前。现在SelectedItem将在SelectedIndex为-1的同时为null。