我有一个列表框绑定到列表。每次ListBox更新以反映集合时,SelectedIndex都会变为顶层项目。如何阻止这种行为并保留当前的SelectedIndex?绑定列表框SelectedIndex不断变化
[更新]
我发现了一个更好地收集到使用这种功能 - 对 '的BindingList':http://msdn.microsoft.com/en-us/library/ms132679(v=VS.90).aspx。
WulfgarPro。
我有一个列表框绑定到列表。每次ListBox更新以反映集合时,SelectedIndex都会变为顶层项目。如何阻止这种行为并保留当前的SelectedIndex?绑定列表框SelectedIndex不断变化
[更新]
我发现了一个更好地收集到使用这种功能 - 对 '的BindingList':http://msdn.microsoft.com/en-us/library/ms132679(v=VS.90).aspx。
WulfgarPro。
当[...]更新以反映集合
这是否意味着有一个新的集合?如果是这样,“同一个位置”是什么意思?
当重新绑定到(nother)列表时,您将不得不保存&恢复索引位置。只需在您更新DataSource的地方编写代码即可。
使用BindingList集合而不是List解决了很多我的问题。我最初使用线程和委托来查询集合并调用ListBox.DataSource = [..]来更新绑定。这很慢,麻烦而且容易出错。更不用说我最初的问题,无法轻松保留SelectedItem。切换到BindingList允许我删除线程和委托,现在一切按预期工作。为ListBox指定所需的显示属性可以使用ListBox.DisplayMember = [..]来实现。
WulfgarPro。
@ Henk Holterman,“相同的位置”我的意思是“相同的项目” - 我试图实现你的建议。我正在使用线程来检索新项目 - 当绑定集合被更改时不应该自动更新ListBox吗?我似乎没有ListBox更新反映集合内的项目,而无需使用委托调用ListBox.DataSource = [..]。 – wulfgarpro
@wulf,BindingList可能会有所帮助。但是如果加载新的(实例)项目,'相同的项目'并不是那么简单。 –
BindingList是完美的!谢谢你的帮助。 –
wulfgarpro