我有一个带有RowFormatter的ObjectListView,它突出显示属性高于用户阈值的行。当用户更改阈值时,我需要控件重绘项目,再次调用RowFormatter,因此将以可视方式应用新阈值。使控件无效似乎没有做任何事情。控件中有45000个对象,因此再次调用SetObjects会导致3-5秒的延迟。有没有办法在可见对象上调用RefreshObjects()?
答案 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上显示群组
除此之外,如果你什么都不做,那应该是替代品。