Problema: La visualizzazione di grandi quantità di dati in un'area scorrevole presenta prestazioni orribili e/o esperienza utente.Problema di prestazioni della virtualizzazione con ampi dati a scorrimento SL4
Provato: Fondamentalmente impostato un DataTemplate in un ListBox per mostrare una griglia di dati popolati con il VirtualizationMode impostato su Ricicla e un'altezza fissa impostata sul ListBox stesso. Qualcosa come l'esempio qui sotto.
<ListBox x:Name="Items"
TabNavigation="Once"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Height="500">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,5">
<HyperlinkButton Content="Action" Margin="5"/>
<ContentControl
cal:View.Model="{Binding}"
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Il ContentControl avrebbe portato in uno standard <Grid>
da un'altra vista che formatta il layout complessivo degli elementi popolate costituiti TextBlocks circa 20 statico, e 20 dati associati.
Funziona bene e taglia i carichi iniziali a metà. TUTTAVIA, ora il problema è che ho bisogno che l'altezza NON sia una dimensione fissa, quindi occupa lo spazio disponibile nel suo genitore e può anche essere ridimensionata. Grazie a @DanFox
ho scoperto che devi correggere l'altezza in un modo o nell'altro per invocare la virtualizzazione o il RenderEngine pensa che abbia comunque una stanza infinita.
La domanda è: C'è un modo migliore per farlo, o come posso almeno correggere la tecnica corrente per consentire una migliore UX? Sto generando potenzialmente centinaia di questi elementi quindi ho bisogno del miglioramento delle prestazioni della virtualizzazione. Tuttavia, devo anche consentire all'utente di ridimensionare la finestra e mantenere la capacità di scorrere in modo efficace.
Qualsiasi intuizione è molto apprezzata, grazie e Buone Feste!
Hai provato a fissare temporaneamente l'altezza di ScrollViewer e altri componenti? A volte il calo delle prestazioni può essere dovuto al fatto che il motore di layout sta dando un'altezza infinita a ScrollViewer. Scusate, non posso essere più esplicito, sono un po 'arrugginito in quest'area, non ho più fatto SL per un po' di tempo ... –
I dati si caricano rapidamente? A quale tipo di collezione sei legato? –
@Dan Fox Quindi, solo il difficile aggiustamento dell'altezza dello scrollviewer potrebbe influire sulla velocità di rendering? –