2009-12-17 8 views
16

Possiedo un numero ListBox che può avere molte righe di record di database con modelli, incluso uno Image, associato a uno ObservableCollection<MyItem>. A volte la raccolta potrebbe contenere migliaia di oggetti.ListBox, VirtualizingStackPanel e scorrimento uniforme in WPF

Le prestazioni sono eccezionali, ma lo scorrimento è il comportamento saltuario predefinito. Mi piacerebbe avere uno scorrimento fluido, quindi ho deselezionato ScrollViewer.CanContentScroll.

Ora lo scorrimento è scorrevole, ma le prestazioni sono orribili: i dati vengono recuperati in una thread separata e il thread termina rapidamente, ma i risultati vengono visualizzati in 10-20 secondi nello ListBox. Presumo che ciò sia dovuto al fatto che la deselezione di ScrollViewer.CanContentScroll modifica il sottostante VirtualizingStackPanel in un normale StackPanel e quindi sta caricando l'intera raccolta prima di visualizzare i risultati.

Quindi la mia domanda è questa: come posso mantenere lo scorrimento fluido senza sacrificare il comportamento e le prestazioni dello VirtualizingStackPanel?

+5

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

+0

Puoi avere sia lo scorrimento fluido che la virtualizzazione se sei pronto a utilizzare un piccolo trucco. Vedi [questa risposta] (http://stackoverflow.com/questions/1977929/wpf-listbox-with-a-listbox-ui-virtualization-and-scrolling/9875475#9875475) a una domanda simile per i dettagli. –

risposta

6

Quando si deseleziona CanContentScroll, si lose virtualization. E la risposta è davvero frustrante: Per ora non v'è alcun out-of-the-box soluzione :(

PS:. Questo non è il primo post qui, chiedendo this very question

+0

Avevo paura di ciò, ma ho dovuto chiedere. Ho cercato prima di chiedere ma non ho trovato quel post. Potrei scavare un po 'di più, ma il tempo è limitato quindi per ora dovrò perdere lo Smooth Scrolling. –

3

Se si utilizza .NET 4.5. (o 4,0 se siete disposti a incidere un po '), allora c'è una risposta over here.

[si noti che @ il commento di Guilluame era qui molto prima questa risposta, ma non è stato particolarmente visibile quando scrematura per le risposte.]