WPF: zones de liste et virtualisation
- Comment puis-je savoir si ma liste est virtualisé?
- Comment puis-je faire de cet extrait virtualisé?
<ScrollViewer Grid.Column="1" Name="LogScroller"> <r:NoInheritanceContentControl> <ListBox Background="Black" ItemsSource="{Binding Path=ActiveLog}" > <ListBox.ItemTemplate> <DataTemplate> <Grid Background="Black"> <Grid.ColumnDefinitions> <ColumnDefinition Width="200"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBlock Grid.Column="0" Grid.Row="0" Foreground="White"> <TextBlock >Date:</TextBlock> <TextBlock Text="{Binding Path=LogDate}"/> </TextBlock> <TextBlock Grid.Column="1" Grid.Row="0" Foreground="White"> <TextBlock >Severity:</TextBlock> <TextBlock Text="{Binding Path=Severity}"/> </TextBlock> <TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Foreground="LightGray" Text="{Binding Path=Message}"></TextBlock> </Grid> </DataTemplate> </ListBox.ItemTemplate> <ListBox.Template> <ControlTemplate> <StackPanel Background="Black" IsItemsHost="True" > </StackPanel> </ControlTemplate> </ListBox.Template> </ListBox> </r:NoInheritanceContentControl> </ScrollViewer>
source d'informationauteur Jonathan Allen
Vous devez vous connecter pour publier un commentaire.
Votre code d'exemple de ne pas virtualiser parce que vous êtes forcer l'utilisation d'un
StackPanel
. Vous devez utiliser unVirtualizingStackPanel
.C'est un outil essentiel pour le développeur wpf comme il a un couple de d'autres fonctionnalités à portée de main ainsi
Savoir si il est virtualisé, vous pouvez simplement ajouter 10K mannequin entrées de la collecte et de voir comment rapide le chargement arrive ainsi que la rapidité du défilement vertical des œuvres qui vont clairement faire une grande différence.
Je suppose que vous avez besoin de changer votre
StackPanel
dans le modèle de contrôle deVirtualizingStackPanel
.Selon les forums MSDN, Toutes liées aux données zones de liste sont virtualisés
Vous pouvez vérifier ce qui se passe dans votre application à l'aide de Snoop - Souris au-dessus de votre zone de liste (ou l'un des éléments) et de regarder les propriétés. L'un d'eux est
VirtualizingStackPanel.IsVirtualizing
- il sera vérifié si la liste est virtualisé, et non si non