2016-09-21 5 views
0

WPF 응용 프로그램에서 관찰 가능 콜렉션이 모눈/목록보기에 표시되어있는 경우. 그리고 사용자는 사전 정의 된 규칙 세트로 보이는 것을 필터링하도록 요청할 수 있습니다. 각 항목에 대한성능이 현저한 이유는 다음과 같습니다. 가시성 변환기 VS 전체 소스 변경

  1. 컨버터
  2. 와 가시성에 바인딩을 추가 또는 전체 소스를 변경하면 필터링 수집 될 : 어떻게 현명 더 나은 성능이 될 것입니다.

컨버터가 어떤 로직을 수행하는 것을 원하지 않습니다. 이미 뷰 모델에서 필터를 완료 한 후 아마 간단한 체크가 될 것입니다. 더 나은 것을 이해하고 구현하고 싶기 때문에 코드가 없습니다.

+2

[? 빠르다 어떤] (https://ericlippert.com/2012/12/17/ performance-rant /) –

+1

@Maya S 내 제안은 당신의 스타일로 방아쇠를 사용하는 것입니다. 잘 정의 된 DataTrigger를 사용하여 목록 상자의 가시성을 관리 할 수 ​​있습니다. 이 방법으로 항목 컬렉션 (필터링 된 컬렉션의 경우와 같이)을 수행하지 않으며 변환기가 필요하지 않습니다. 예제가 필요한 경우 알려주십시오. – Ilan

+0

@Ilan 코멘트 주셔서 감사합니다. 그것은 내 옵션 중 하나 였지만 컨버터 대 웹 트리거를 통해 검색 할 때 - 대부분의 기사는 컨버터가 더 좋다고 제안했습니다. 그래서 내가 최고의 성능을 필요로하기 때문에이 2 사이를 결정하려고합니다. –

답변

4

나는 당신이 달성하고자하는 최선의 방법은 CollectionViewSource를 사용하는 것이라고 생각합니다.

var view = new CollectionViewSource(); 
view.Filter += Filter; 
view.Source = source; 

void Filter(object sender, FilterEventArgs e) 
{ 
    if (e.Item != null) 
     e.Accepted = false; //condition here   
} 

CollectionViewSource : 당신이 예를 찾을 수 있습니다 https://msdn.microsoft.com/fr-fr/library/system.windows.data.collectionviewsource(v=vs.110).aspx

:

https://stackoverflow.com/a/9618387/5703316

+0

제 이해에서 CollectionViewSource는 컨트롤입니다. 안타깝게도 응용 프로그램에서 사용하는 컨트롤을 변경할 수 없습니다. 답장을 보내 주셔서 감사합니다.이 컨트롤에 대해 알지 못했습니다. –

+0

일부 연구 후, 나는 [이 질문에] 건너 왔어 (http://stackoverflow.com/questions/1280704/how-can-i-sort-a-listbox-using-only-xaml-and-no-code-behind) 그리고 솔루션은 당신이 제안한 CollectionViewSource를 사용하는 것이 었습니다 - 그러나 정적 리소스로서 그리드 /리스트에 대한 소스 바인딩으로 사용했습니다. 나는이 대답을 받아 들일 것이다. –