如何强制刷新 ObjectListView 可见项?

How to force refresh on ObjectListView visible items?

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

听起来您可能想改用 FastObjectListView。它是 VirtualObjectListView 的一个实现,并且比 ObjectListView 快得多。我不确定实现细节,但我认为它的核心完全符合您的要求 - required/visible.

时只是 handling/updating 个对象

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

上显示组

除此之外,如果您不做任何特别花哨的事情,它应该是一个替代品。

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

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

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