2009-12-17 2 views
16

ObservableCollection<MyItem>에 바인딩 된 Image을 포함하여 템플릿 기반 DB 레코드의 행이 여러 개일 수있는 ListBox이 있습니다. 컬렉션에 수천 개의 항목이 포함될 수 있습니다.WPF의 ListBox, VirtualizingStackPanel 및 Smooth Scroll

성능은 좋지만 스크롤이 기본 동작이 아닙니다. 부드러운 스크롤링을 원합니다. 따라서 ScrollViewer.CanContentScroll의 선택을 취소했습니다.

부드럽게 스크롤하지만 성능은 매우 높습니다. 데이터가 별도의 스레드에서 검색되고 스레드가 빠르게 완료되지만 결과가 ListBox에 표시 되려면 10-20 초가 걸립니다. ScrollViewer.CanContentScroll을 선택 취소하면 기본 VirtualizingStackPanel이 일반 StackPanel으로 변경되므로 결과를 표시하기 전에 전체 컬렉션을로드하고 있기 때문입니다.

제 질문은 이것입니다 : VirtualizingStackPanel 동작과 성능을 희생하지 않고 부드러운 스크롤을 유지하려면 어떻게해야합니까?

+5

http://stackoverflow.com/questions/1977929/wpf-listbox-with-a-listbox-ui-virtualization-and-scrolling/9875475 Virtua lizingPanel.ScrollUnit = "Pixel" – Guillaume

+0

작은 해킹을 사용할 준비가되면 부드러운 스크롤과 가상화를 모두 할 수 있습니다. [이 답변] (http://stackoverflow.com/questions/1977929/wpf-listbox-with-a-listbox-ui-virtualization-and-scrolling/9875475#9875475)에서 비슷한 질문을하십시오. –

답변

6

CanContentScroll의 선택을 취소하면 lose virtualization입니다. 그리고 그 대답은 정말 실망 : 이제 더 out-of-the-box 솔루션 :(이없는 경우

추신 :.이 this very question 요청, 여기에 첫 번째 게시물 아니다

+0

나는 그것을 두려워했지만 물어야했다. 나는 물어보기 전에 수색했지만 그 지위는 찾지 못했습니다. 나는 조금 더 파고 들지만, 시간은 제한되어 있으므로 지금은 Smooth Scrolling을 잃어 버려야 할 것입니다. –

3

당신이 .NET 4.5을 사용하는 경우. (또는 4.0을 사용하면 조금 해킹 기꺼이 경우) 다음 대답 over here있다.

[이주의 @ Guilluame의 코멘트는 여기이 대답하기 전에 방법했지만 답을 감추고 때 특히 볼 수 없었습니다.]

관련 문제