2009-06-11 3 views
3

C# : 효과적으로 가상 모드에서 ListView 항목을 필터링 (숨기기)하는 방법?C# : 효과적으로 (숨기기) ListView 항목을 가상 모드에서 필터링하는 방법?

가상 모드에서 ListView의 항목을 숨기거나 표시하는 방법을 찾고 있습니다. 나는 목록보기 항목의 배열에 캐시 된 항목을 가지고 있는데, 필터 단추를 누를 때 특정 목록보기 항목 만 표시되도록 설정하고, 필터 단추를 누를 때 모든 항목을 다시 표시하도록하려면 어떻게 효과적으로 만들 수 있습니까?

답변

2

표시 행 목록을 매핑해야 RetrieveVirtualItem에서 항목을 요청할 때 필터링 된 목록에 표시 항목 만 포함되도록 요청할 수 있습니다.

CacheVirtualItems를 사용하여 ListViewItems를 저장하는 경우 필터링이 적용될 때 해당 캐시를 업데이트하고 보이지 않는 모든 행을 제거해야합니다. 복잡성을 줄이려면 캐시를 지우는 것이 좋습니다.

0

나는이 프로젝트에서 ListView에 표시했던 개체에 FilterResult 속성을 추가하여이 작업을 수행했습니다. 그런 다음 ListView에 사용되는 항목 템플릿에, 내가 가시성에 세터로, FilterResult에 DataTrigger를 넣어, 뭔가 같은 : 해당 사용자가 필터를 변경하면 다음, 난 그냥 컬렉션을 통해 이동

<DataTrigger Binding="{Binding FilterResult}" Value="False"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
</DataTrigger> 

업데이트 각 FilterResult (PropertyChanged 알림 속성) 및 voila! : =)

여전히 FilterResult 플래그를 사용하는 다른 솔루션은 FilterResult가 true 인 항목 만 노출하는 주 Collection에 연결되는 NotifyingCollection을 만드는 것입니다. 따라서 하나의 항목이 FilterResult의 값을 전환하면 CollectionChanged 이벤트를 관리해야합니다. ...

관련 문제