嘿,我有一个winforms 虚拟化的列表视图,我希望能够进行排序。我实现了一个从IComparer派生的分类器类。现在,每当我想对我的listview进行排序时,我会执行以下操作:
public void SortMyVirtualListView()
{
this.VirtualListSize = 0; // set virtual size to 0
_myInnerList.Sort(_myComparer); // sort the inner listlistview items source)
this.VirtualListSize = _myInnerList.Count; // re-set the virtual size to items count
}我想确定的是--这真的是在排序之后重置虚拟列表视图项的方式吗?是否真的必须将虚拟列表大小设置为0,然后将其重置为新大小?
我似乎不能省略关于将VirtualListSize设置为零的部分,然后在重新排序基础列表之后,将VirtualListSize设置为其原始值(this.VirtualListSize = _myInnerList.Count)。
我无法为winforms的优化(和可排序)虚拟列表视图找到任何令人满意的代码。
发布于 2011-02-08 10:31:05
设置VirtualListSize是否存在性能问题?这是有意义的,因为ListView不知道您的内部列表发生了变化,所以您需要以某种方式告诉它。如果以这种方式重置VirtualListSize会导致性能问题,那么仅仅重绘可见项就会产生影响吗?
_myInnerList.Sort(_myComparer); // sort the inner listlistview items source)
int startIndex = this.TopItem == null ? 0 : this.TopItem.Index;
int endIndex = Math.Min(startIndex + 100, this.VirtualListSize - 1);
this.RedrawItems(startIndex, endIndex, true);(是的,我知道,我也不喜欢魔法数字100 .:)
编辑:排序后调用刷新()的也应该工作。
https://stackoverflow.com/questions/4913430
复制相似问题