- Как узнать, виртуализирован ли мой список?
-
Как сделать этот сниппет виртуализированным?
<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>
WPF: списки и виртуализация
Ответ 1
Ваш образец кода не виртуализируется, потому что вы вынуждаете использовать StackPanel
. Вы должны использовать VirtualizingStackPanel
.
Ответ 2
- Если вы хотите знать наверняка. Загрузите Snoop он имеет трехмерное представление, которое вы можете использовать для просмотра каждого визуализируемого элемента. (вкл. и выкл.) Если ваш список не виртуализирован, вы увидите все элементы списка, идущие со страницы в красивом трехмерном виде.
Это важный инструмент для разработчика wpf, так как он имеет пару других действительно удобных функций, а также
- Избавьтесь от этого шаблона окна списка, который использует панель стека. Если все, что он делает, делает черный фон, просто установите черный фон.
Ответ 3
Чтобы узнать, виртуализирована ли она, вы можете просто добавить 10 000 фиктивных записей в коллекцию и посмотреть, как быстро происходит загрузка, а также насколько быстро работает вертикальная прокрутка, которая, несомненно, будет иметь большое значение.
Я думаю, вам нужно изменить StackPanel
в шаблоне управления на VirtualizingStackPanel
.
Ответ 4
В соответствии с форумами MSDN все бонусные списки данных виртуализированы
Вы можете проверить, что происходит в вашем приложении, используя Snoop - мышь над вашим списком (или одним из элементов) и посмотрите в свойствах. Один из них VirtualizingStackPanel.IsVirtualizing
- он будет проверен, если список виртуализирован, и не отмечен, если не