2011-02-06 5 views
0

안녕하세요 모두 나는 winforms 가상화 Listview 내가 할 수있게하고 싶습니다. IComparer에서 파생되는 분류기 클래스를 구현했습니다. 이제 난 내 목록보기를 정렬 할 때마다 나는 다음을 수행하십시오winforms에 대한 가상 목록보기 정렬

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 설정 약 일부를 생략 할 수없는 것처럼

그것은 보인다 (this.VirtualListSize = _myInnerList.Count) 원래 값 VirtualListSize 세트.

winforms의 최적화 된 (및 정렬 가능) 가상 목록보기에 대한 만족스러운 코드를 찾을 수 없습니다.

답변

2

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) 중 하나를 ... :)

편집을 좋아하지 않는다.

+0

누군가가 내부 목록의 정렬 작업 후 Invalidate()를 호출하는 응답을 게시했습니다. 그것은 작동하지만 .. RedrawItems() 호출 훨씬 빠를 것 같아요, 맞죠? – programmer

+0

최대 투표 수입니다. Refresh() – Eugen

관련 문제