2010-03-26 3 views
8

ListView를 가상 모드로 사용하고있는 경우 목록보기는 목록의 일부 항목 만 추적합니다. 사용자가 스크롤하면 가상 목록에서 표시해야하는 항목을 동적으로 검색합니다.어떻게 추가/가상 모드에서 ListView 항목을 제거합니까?

하지만 항목이 마스터 목록에 추가되거나 제거되면 어떻게됩니까? 항목이 목록보기에 표시된 색인 범위 밖에서 추가/제거 된 경우 사용자가 해당 색인으로 스크롤 할 때 목록보기에 추가/누락 된 항목이 표시된다고 가정합니다. 이 올바른지? 그러나 사용자가 현재보고있는 색인 범위에서 항목을 추가/제거하면 어떻게됩니까? 새롭거나 누락 된 항목을 표시하기 위해 현재 표시된 항목을 새로 고치려면 목록보기를 실행하려면 어떻게합니까?

FYI : 차이점이 있다면 ObjectListView을 사용하고 있습니다.

답변

8

가상 목록은 항목 목록에 대해 아무것도 모릅니다. 작은 세트조차도 추적하지 않습니다. 그것은 단지 "네 번째 행에 무엇을 보여주고 싶니?"라고 묻는다.

마스터 목록이 변경되면 목록을 다시 그려야합니다. Invalidate()가 도움이 될 것입니다. 그러면 listview는 컨트롤에 표시된 모든 행에 표시 할 내용을 다시 묻습니다.

ObjectListView를 사용하는 경우 가상 목록의 속도 이점과 일반적인 ObjectListView의 사용 용이성을 제공하는 FastObjectListView를 사용하는 것이 좋습니다.

+0

목록의 각 항목에 대해 개별 미리보기 이미지를로드하므로 미리보기 이미지를 미리로드 할 수 있도록 사용자가 각 항목을 볼 때 알림을 받아야합니다. 잠재적으로 많은 수의 항목을 표시 할 수 있으므로 모든 축소판을 한 번에로드하는 것을 피하려고합니다. 현재 컬렉션을 변경하면 VirtualLIstView를 업데이트하기 위해 Build()를 호출합니다. 빌드()를 통해 Invalidate()를 호출해야하는 이유가 있습니까? –

+1

가상 목록은 원하는 작업을 수행하는 데 올바른 방법입니다. 동일한 전략을 사용했습니다. 그리고 BuildList()는 처리의 일부로 Invalidate()를 호출하는 것이 가장 좋습니다. 작동합니까? – Grammarian

관련 문제