【问题标题】:How to force refresh on ObjectListView visible items?如何强制刷新 ObjectListView 可见项目?
【发布时间】:2017-11-09 15:27:38
【问题描述】:

我有一个带有 RowFormatter 的 ObjectListView,它突出显示具有高于用户阈值的属性的行。当用户更改阈值时,我需要控件重新绘制项目,再次调用 RowFormatter,因此新的阈值将在视觉上应用。使控件无效似乎没有任何作用。控件中有 45000 个对象,因此再次调用 SetObjects 会导致 3-5 秒的延迟。有什么方法可以只对可见对象调用 RefreshObjects() 吗?

【问题讨论】:

    标签: c# objectlistview


    【解决方案1】:

    我能想到的最好的办法就是执行这样的事情:

    int lvi = myOLV.TopItemIndex;
    for (int i = 0; i < 30; i++)
        myOLV.RefreshItem((OLVListItem)myOLV.Items[i + lvi]);
    

    每当行格式规则更改时。这会刷新列表视图中显示的前 30 个项目;我想如果有人使用大型纵向显示器可能还不够。但它很快并且对我有用。

    【讨论】:

      【解决方案2】:

      听起来您可能想改用 FastObjectListView。它是 VirtualObjectListView 的实现,比 ObjectListView 快得多。我不确定实现细节,但我认为它的核心正是你想要的 - 只是在需要/可见时处理/更新对象。

      有一些小的限制: - 它不能使用平铺视图 - 它不能显示动画 GIF - 它不能在 XP 上显示组

      除此之外,如果你没有做任何特别花哨的事情,它应该是一个直接的替代品。

      【讨论】:

      • 我的大多数用例实际上都是 TreeListViews,所以 FastObjectListView 不是一个选项。此外,对象本身根本没有变化。只是行格式规则。
      猜你喜欢
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多