Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF: List boxes and virtualization

  1. How do I know whether or not my list is being virtualized?
  2. 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>
    
like image 754
Jonathan Allen Avatar asked Jan 27 '10 00:01

Jonathan Allen


2 Answers

Your code sample does not virtualize because you are forcing the use of a StackPanel. You have to use a VirtualizingStackPanel.

like image 177
Bruno Martinez Avatar answered Sep 21 '22 19:09

Bruno Martinez


  1. If you want to know for certain. Download Snoop it has a 3d view that you can use to see every element that is rendered. (on and off screen) If your list box is not virtualised you will see all the list items marching off the page in a lovely 3d view.

It is an essential tool for the wpf developer as it has a couple of other really handy features as well

  1. Get rid of that list box template that uses a stack panel. If all it is doing is making the background black, then just set the background black.
like image 42
Aran Mulholland Avatar answered Sep 18 '22 19:09

Aran Mulholland