【问题标题】:Bound ListBox SelectedIndex keeps changingBound ListBox SelectedIndex 不断变化
【发布时间】:2011-01-25 13:17:16
【问题描述】:

我有一个绑定到列表的列表框。每次 ListBox 更新以反映集合时,SelectedIndex 都会更改为顶部项目。如何停止这种行为并保留当前的 ​​SelectedIndex?

[更新]

我找到了一个更好的集合用于这种功能 - 'BindingList':http://msdn.microsoft.com/en-us/library/ms132679(v=VS.90).aspx

WulfgarPro.

【问题讨论】:

    标签: c# winforms data-binding


    【解决方案1】:

    当 [...] 更新以反映集合时

    这是否意味着有一个新系列?如果是,“相同位置”是什么意思?

    重新绑定到(另一个)列表时,您必须保存并恢复索引位置。只需在更新数据源的地方编写代码即可。

    【讨论】:

    • @ Henk Holterman,我所说的“相同位置”是指“相同项目”——我正在尝试实施您的建议。我正在使用线程来检索新项目-更改绑定集合时 ListBox 不应该自动更新吗?如果不使用委托调用 ListBox.DataSource=[..],我似乎无法更新 ListBox 以反映集合中的项目..
    • @wulf,BindingList 可能会有所帮助。但是,如果您加载新的(实例)项目,“相同项目”就不是那么简单了。
    • BindingList 非常完美!感谢您的帮助。
    【解决方案2】:

    使用 BindingList 集合而不是 List 解决了我的很多问题。我最初使用 Thread 和 Delegate 来查询集合并调用 ListBox.DataSource=[..] 来更新绑定。这是缓慢、繁琐且容易出错的。更不用说我原来的问题是无法轻松保留 SelectedItem。更改为 BindingList 允许我删除线程和委托,现在一切都按预期工作。可以使用 ListBox.DisplayMember=[..] 为 ListBox 分配所需的显示属性。

    WulfgarPro.

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      相关资源
      最近更新 更多