C# 如何强制对ObjectListView可见项进行刷新?

C# 如何强制对ObjectListView可见项进行刷新?,c#,objectlistview,C#,Objectlistview,我有一个带有RowFormatter的窗口,它高亮显示属性高于用户阈值的行。当用户更改阈值时,我需要控件重新绘制项目,再次调用RowFormatter,以便可视化地应用新阈值。使控件无效似乎没有任何作用。控件中有45000个对象,因此再次调用SetObjects会导致3-5秒的延迟。是否有方法仅对可见对象调用RefreshObjects()。听起来您可能想使用FastObjectListView。它是VirtualObjectListView的实现,比ObjectListView快得多。我不确定

我有一个带有RowFormatter的窗口,它高亮显示属性高于用户阈值的行。当用户更改阈值时,我需要控件重新绘制项目,再次调用RowFormatter,以便可视化地应用新阈值。使控件无效似乎没有任何作用。控件中有45000个对象,因此再次调用SetObjects会导致3-5秒的延迟。是否有方法仅对可见对象调用RefreshObjects()。

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

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


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

我能想到的最好办法是执行如下操作:

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

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

我的大多数用例实际上都是树视图,所以FastObjectListView不是一个选项。而且,对象本身根本没有改变;只有行格式规则。