2010-01-15 5 views
2

콘텐츠가 변경 될 때 다시 처리해야하는 데이터의 목록 (최대 500 개 항목)을 표시 할 수 있어야하는 프로그램을 개발 중입니다.대용량 정렬 목록을 WPF로 빠르게 표시 하시겠습니까?

본질적으로 ListView에 표시되는 gui에 바인딩 된 관찰 가능 데이터가있는 클래스를 포함하는 관찰 가능 컬렉션이있는 뷰 모델이 있습니다.

데이터를 정렬해야하지만 데이터는 언제든지 변경 될 수 있으며 매번 목록을 다시 작성해야합니다.

GUI를 잠그지 않고 모든 것을 표시하고 유지하는 가장 좋은 메커니즘/은유는 무엇입니까? NotifyCollectionChangedEventArgs 및 일부 정렬 함수를 사용하는 솔루션이 있지만 SLOW - 데이터 요소가 변경 될 때마다 전체 GUI를 휴양 및 재구성한다고 가정합니다.

답변

8

CollectionView/CollectionViewSource 클래스를 살펴보십시오. 이러한 클래스는 정렬, 필터링 등의 작업을 수행하기 위해 ObservableCollection과 WPF의 데이터 바인딩 논리 사이에 있습니다.

NotifyCollectionChanged에서 사용자 지정 정렬 함수를 작성하는 것이 성능 문제의 원인이라고 생각합니다. 그것은 당신의 정확한 구현에 따라 다르지만 아마도 당신이 정렬 루틴의 반복마다 WPF 바인딩을 다시 바인딩하는 목록을 정렬 할 때 발생하는 CollectionChanged 이벤트의 혼란이있을 것입니다 ... 그것은 당신처럼 느려질 것입니다 설명했다.

CollectionView 및 CollectionViewSource는 소스 컬렉션, UI에 표시된 컬렉션의 뷰에만 영향을 미치지 않으므로 지금 수행중인 작업보다 훨씬 빠른 속도를보아야합니다. Microsoft의 DataGrid 컨트롤이 릴리스되었을 때 수백만 행을 표시하고 정렬하는 데모가 있었으며 정확하게 이러한 클래스를 사용하여 정렬 작업을 수행했습니다. 당신은 정말로 500 행의 성능 문제를 보지 않아야합니다.

마지막으로 CollectionView와 CollectionViewSource의 차이점은 사용하도록 설계된 곳입니다. CollectionView는 XAML에서 C#, CollectionViewSource로 작업 할 때 사용됩니다. 이 수업에 대한 개요를 보려면 this article을 참조하십시오.

관련 문제