2009-12-17 35 views
16

Tôi có một ListBox có thể có nhiều hàng bản ghi DB templated, bao gồm Image, được liên kết với ObservableCollection<MyItem>. Đôi khi, bộ sưu tập có thể chứa hàng nghìn mục.ListBox, VirtualizingStackPanel và Smooth Scrolling trong WPF

Hiệu suất tuyệt vời, nhưng cuộn là hành vi chuyển tiếp mặc định. Tôi muốn nó có cuộn trơn tru, vì vậy tôi đã bỏ chọn ScrollViewer.CanContentScroll.

Bây giờ tôi đã cuộn trơn tru, nhưng hiệu suất là khủng khiếp: dữ liệu được truy xuất trong một chuỗi riêng biệt và chuỗi kết thúc nhanh chóng, nhưng phải mất 10-20 giây để kết quả hiển thị trong ListBox. Tôi cho rằng điều này là do bỏ chọn ScrollViewer.CanContentScroll thay đổi số VirtualizingStackPanel cơ bản thành số StackPanel thông thường và do đó, nó đang tải toàn bộ bộ sưu tập trước khi hiển thị kết quả.

Vì vậy, câu hỏi của tôi là: làm cách nào để giữ lại thao tác cuộn trơn tru mà không làm mất hoạt động và hiệu suất của VirtualizingStackPanel?

+5

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

+0

Bạn có thể có cả cuộn trơn tru và ảo hóa nếu bạn chuẩn bị sử dụng một chút hack. Xem [câu trả lời này] (http://stackoverflow.com/questions/1977929/wpf-listbox-with-a-listbox-ui-virtualization-and-scrolling/9875475#9875475) cho một câu hỏi tương tự để biết chi tiết. –

Trả lời

6

Khi bạn bỏ chọn CanContentScroll, bạn lose virtualization. Và câu trả lời là thực sự bực bội: Còn bây giờ không có out-of-the-box giải pháp :(

PS:. Đây không phải là bài đầu tiên ở đây, yêu cầu this very question

+0

Tôi sợ điều đó nhưng phải hỏi. Tôi đã tìm kiếm trước khi hỏi nhưng không tìm thấy bài đăng đó. Tôi có thể đào nhiều hơn một chút, nhưng thời gian bị giới hạn vì vậy tôi sẽ phải mất Smooth Scrolling ngay bây giờ. –

3

Nếu bạn sử dụng .NET 4.5. (hoặc 4.0 nếu bạn sẵn sàng để hack một chút) sau đó có một câu trả lời over here.

[Lưu ý rằng @ bình luận Guilluame của đã ở đây cách trước câu trả lời này nhưng nó không phải là đặc biệt có thể nhìn thấy khi lướt cho câu trả lời.]

Các vấn đề liên quan