Как я делаю этот отрывок виртуализированным?
<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>
Ваш образец кода не виртуализируется, потому что вы заставляете использование StackPanel
. Вы должны использовать VirtualizingStackPanel
.
Чтобы знать, если он виртуализируется, вы можете просто добавить 10K фиктивных записей в коллекцию и посмотреть, насколько быстрая загрузка происходит, а также как быстрые работы вертикальных прокрутков, которые четко рассказывают большую разницу.
Я думаю, вам нужно изменить ваш StackPanel
в шаблоне управления на VirtualizingStackPanel
.
Это необходимый инструмент для разработчика WPF, поскольку он имеет пару других действительно удобных функций
Согласно форумам MSDN, все списки по билету находятся виртуализированы
, вы можете проверить, что происходит в вашем приложении, используя Snoop - Наведите курсор на свой список (или один из предметы) и посмотрите на свойства. Одним из них является
VirtualizzeStackPanel.isvirtualualizing
- это будет проверено, если список виртуализирован, и не проверяют, если нет