2012-01-11 7 views
0

데이터 바인딩 된 항목 목록이 있습니다.데이터 바인딩 목록보기 다중 선택 및 필터링

설명에 입력 된 텍스트가 포함되어 있는지 여부에 대한 가시성을 바인딩하여 즉시 필터링하는 텍스트 상자가 있습니다. 이것은 또한 'focusable'속성에 바인딩되어 필터 때문에 보이지 않는 선택된 항목을 제거합니다. ListBoxItems에 대한

DataTrigger는 :

  <DataTrigger Value="False"> 
       <DataTrigger.Binding> 
        <MultiBinding Converter="{StaticResource filterToBoolean}"> 
         <Binding Path="Description" /> 
         <Binding ElementName="txtFilter" Path="Text" /> 
        </MultiBinding> 
       </DataTrigger.Binding> 
       <Setter Property="Visibility" Value="Collapsed" /> 
       <Setter Property="Focusable" Value="False" /> 
      </DataTrigger> 

내 문제는 다음과 같은 경우에 나타납니다. 세 가지 항목이 있다고 가정 해 봅시다 (Joe, Bob, Jacob).

필터에 'J'를 입력하고 'Joe'를 선택하고 Shift + 'Jacob'을 클릭하면 'Bob'이 보이지 않아도 3 개의 항목 (모두)이 선택됩니다. 필터를 적용하기 전에 세 가지 모두를 선택한 경우에도 마찬가지입니다.

여기에서이 문제를 해결하려는 시도를 발견했지만 완전히 작동하지는 않습니다. 필터가 적용되기 전에 항목이 선택되면 적용되지만 나중에 선택하면 동일한 문제가 발생합니다.

도움을 주셔서 미리 감사드립니다.

+0

[ICollectionView] (http://msdn.microsoft.com/en-us/library/system.componentmodel.icollectionview.aspx) (주의 사항 참조)를 사용해야합니다. 마찬가지로, 구글 "WPF ListView 필터" –

답변

2

ListView은 컬렉션의 각 개체에 대해 ListViewItem을 만듭니다. 가시성이 숨김으로 설정되었다고해서 항목이 목록보기에 없다는 것을 의미하지는 않습니다. Shift-Select 항목을 선택하면 두 항목 사이의 모든 항목이 선택됩니다. 여기에는 "Bob"(표시 여부)이 포함됩니다.

적절한 컬렉션 필터링을 수행하려면 속성을 CollectionViewSource 사용해야합니다. 필터링이 느려질 수 있습니다 많은 이유가 있습니다

Trigger Filter on CollectionViewSource

편집 : 그것을 할 수있는 방법의 샘플이 질문에 허용 대답이다. 이 질문은 귀하가 확인할 수있는 것들에 대한 제안을 가지고 있습니다 : WPF's ICollectionView.filter with large sets of data

그러면 도움이되지 않는다면 다른 질문을 할 수 있습니다 (필터링 및 목록보기 데이터 바인딩을 수행하는 방법에 대한 코드를 제공해야합니다).

+0

나는 이전에 필터를 시도하고 그것은 매우 느리게 끝났다. 그것을 바인딩하는 방식으로 필터를 본질적으로 순간적으로 만들지 만 '필터'는 각 문자를 입력 할 때마다 10-15 초가 걸립니다. - 나는 그것을 다시 시험해보고 더 빨리 일할 수 있는지 알아볼 것입니다. 감사. – elbweb

+0

예상대로 작동하지만 느립니다. 어쩌면 내가 뭔가 잘못하고있는 것일까 요? 가시성 변경으로 인해 모든 항목이 메모리에 생성되고 일부 속성 만 변경된다는 점에서 datatemplate에서 각 항목을 다시 작성하기 때문에 속도가 느린 것 같습니다. 어떤 도움이 필요합니까? – elbweb

+0

@elbweb 답변을 업데이트했습니다. – ChrisWue