ListBox, VirtualizingStackPanel e scorrimento uniforme in WPF
-
20-09-2019 - |
Domanda
Ho un ListBox
che può avere molte righe di record DB su modelli, tra cui un Image
, legato ad un ObservableCollection<MyItem>
. A volte la raccolta potrebbe contenere migliaia di oggetti.
La performance è grande, ma lo scorrimento è il comportamento di default jumpy. Vorrei che avesse lo scorrimento uniforme, così ho incontrollato ScrollViewer.CanContentScroll
.
Ora ho lo scorrimento uniforme, ma la prestazione è orrendo: i dati vengono recuperati in un thread separato, e il filo finisce in fretta, ma ci vogliono 10-20 secondi per i risultati da mostrare nel ListBox
. Presumo che questo è perché deselezionando ScrollViewer.CanContentScroll
cambia la VirtualizingStackPanel
sottostante ad un StackPanel
regolare e quindi sta caricando l'intera collezione prima di visualizzare i risultati.
Quindi la mia domanda è questa: come faccio a mantenere il l'scorrimento uniforme, senza sacrificare il comportamento e le prestazioni VirtualizingStackPanel
Soluzione
Quando si deselezionare CanContentScroll, si perdere virtualizzazione . E la risposta è davvero frustrante: Per ora non esiste una soluzione out-of-the-box:. (
PS: Questo non è il primo post qui, chiedendo questa domanda .
Altri suggerimenti
Se si utilizza .NET 4.5 (o 4.0 se siete disposti a incidere un po '), allora c'è una risposta qui .
[Si noti che @ il commento di Guilluame era qui molto prima questa risposta, ma non è stato particolarmente visibile quando scrematura per le risposte.]