- How do I know whether or not my list is being virtualized?
How do I make this snippet virtualized?
<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>
相关问题
- VNC control for WPF application
- WPF Binding from System.Windows.SystemParameters.P
- XAML: Applying styles to nested controls
- How can I add a horizontal line (“goal line”) for
- How to properly change a resource dictionary
Your code sample does not virtualize because you are forcing the use of a
StackPanel
. You have to use aVirtualizingStackPanel
.To know if it is virtualized you can simply add 10K dummy entries to the collection and see how fast the loading happens as well as how fast the vertical scroll works which will clearly tell a big difference. I guess you need to change your
StackPanel
in the control template toVirtualizingStackPanel
.According to the MSDN forums, All databound listboxes are virtualized
You can check what's going on in your app using Snoop - Mouse over your listbox (or one of the items) and look at the properties. One of them is
VirtualizingStackPanel.IsVirtualizing
- it will be checked if the list is virtualized, and unchecked if notIt is an essential tool for the wpf developer as it has a couple of other really handy features as well