This documentation is archived and is not being maintained.

VirtualizingStackPanel.VirtualizationMode Attached Property

Gets or sets how a panel in an ItemsControl virtualizes its child items.

Namespace:  System.Windows.Controls
Assembly:  PresentationFramework (in PresentationFramework.dll)
XMLNS for XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

See GetVirtualizationMode, SetVirtualizationMode
<object VirtualizingStackPanel.VirtualizationMode="VirtualizationMode" .../>

Property Value

Type: System.Windows.Controls.VirtualizationMode
One of the enumeration values that specifies how a panel in an ItemsControl virtualizes its child items.

By default, a VirtualizingStackPanel creates an item container for each visible item and discards it when it is no longer needed (such as when the item is scrolled out of view). When an ItemsControl contains a lot of items, the process of creating and discarding item containers can negatively affect performance. When VirtualizingStackPanel.VirtualizationMode is set to Recycling, the VirtualizingStackPanel reuses item containers instead of creating a new one each time.

When VirtualizingStackPanel cannot recycle item containers, it uses the standard mode of virtualization, which is to create and discard item containers for each item. The following lists describes cases when the VirtualizingStackPanel cannot recycle item containers:

  • The ItemsControl contains item containers of different types. For example, a Menu might have items that use both MenuItem and Separator objects as the item containers.

  • You explicitly create the item containers to the ItemsControl. For more information about explicitly versus implicitly creating item containers, see the ItemsControl class.

When a VirtualizingStackPanel is recycling item containers, you may need to save state information that is associated with a container instead of with the data item itself. For example, if an item is contained by an Expander control, the IsExpanded state is bound to the item container, and not to the data item itself. When the Expander is reused for a new item, the current value of IsExpanded is used for the new item. In addition, the old item does not retain its IsExpanded value.

The following example creates a ListBox and sets the VirtualizingStackPanel.VirtualizationMode attached property to Recycling.


<StackPanel>

  <StackPanel.Resources>
    <src:LotsOfItems x:Key="data"/>
  </StackPanel.Resources>

  <ListBox Height="150" ItemsSource="{StaticResource data}" 
             VirtualizingStackPanel.VirtualizationMode="Recycling" />

</StackPanel>


The following example shows the data used in the previous example.


public class LotsOfItems : ObservableCollection<String>
{
    public LotsOfItems()
    {
        for (int i = 0; i < 1000; ++i)
        {
            Add("item " + i.ToString());
        }
    }
}


.NET Framework

Supported in: 4, 3.5 SP1, 3.0 SP2

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Show: