2009-12-17 21 views
16

Bir Image, bir ObservableCollection<MyItem> için bağlanmış da dahil olmak üzere bir çok templated DB kayıtları, satır olabilir bir ListBox var. Bazen koleksiyon binlerce eşya tutabilir.ListBox, VirtualizingStackPanel ve Pürüzsüz Scrolling WPF içinde

Performans harika, ancak kaydırma varsayılan jumpy davranışıdır. Düzgün kaydırma yapmasını istiyorum, bu yüzden ScrollViewer.CanContentScroll işaretini kaldırdım.

Şimdi düzgün bir kaydırma işlemine sahibim, ancak bu performans çok korkunç: veriler ayrı bir iş parçacığında alınacak ve iş parçacığı hızla bitiyor, ancak sonuçların ListBox'da gösterilmesi 10-20 saniye sürüyor. Bunun nedeni, ScrollViewer.CanContentScroll işaretinin kaldırılmasının, 'un temelini StackPanel düzenli olarak değiştirdiğinden ve sonuçların görüntülenmesinden önce tüm koleksiyonun yüklenmesinden kaynaklanmaktadır.

Bu yüzden sorum şu: VirtualizingStackPanel davranış ve performanstan ödün vermeden düzgün kaydırma özelliğini nasıl koruyabilirim?

+5

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

+0

Küçük bir kesmek için hazırsanız, hem düzgün kaydırma hem de sanallaştırma yapabilirsiniz. Ayrıntılar için benzer bir soruya [bu yanıt] (http://stackoverflow.com/questions/1977929/wpf-listbox-with-a-listbox-ui-virtualization-and-scrolling/9875475#9875475) bakın. –

cevap

6

CanContentScroll işaretini kaldırdığınızda, lose virtualization. Ve cevap gerçekten sinir bozucu olduğunu: artık hiçbir dışı-box çözümü :(yoktur İçin

PS:. Bu this very question soran burada sonrası ilk değil

+0

Bundan korkuyordum ama sormak zorundaydım. Sormadan önce aradım ama bu yazıyı bulamadım. Biraz daha fazla kazabilirim, ama zaman sınırlıdır, bu yüzden şimdilik Smooth Scrolling'i kaybetmem gerekecek. –

3

.NET 4.5 kullanın. (veya 4.0 Eğer biraz kesmek çekinmiyorsanız) daha sonra bir cevap over here var.

[Not @ Guilluame 'in yorumları burada bu cevap daha önce yoluydu ama cevapları kaymağını zaman özellikle görünmüyordu.]