如何强制刷新ObjectListView可见项?

时间:2017-11-09 15:27:38

标签: c# objectlistview

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

听起来您可能想要使用 FastObjectListView 。它是 VirtualObjectListView 的实现,并且比 ObjectListView 更快。我不确定实现细节,但我认为它的核心完全符合您的要求 - 只需在需要/可见时处理/更新对象。

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

除此之外,如果你什么都不做,那应该是替代品。