默认情况下, VirtualizingStackPanel 创建每个可见项的项容器以及丢弃,当不再需要时 (例如,当项滚动到视图之外时)。 当 ItemsControl 包含许多项目时,会创建并放弃项容器处理会对性能产生负面影响。 当 VirtualizingStackPanel.VirtualizationMode 设置为 Recycling时, VirtualizingStackPanel 重用项目容器而不是每次创建新的。即:
Recycling:重复利用
Standard:创建和丢弃容器
那么两者使用场景是什么呢?
1、当对数据模板没有要求时使用Recycling,可节省资源,因为容器都是循环使用的
<StackPanel>
<StackPanel.Resources>
<src:LotsOfItems x:Key="data"/>
</StackPanel.Resources>
<ListBox Height="150" ItemsSource="{StaticResource data}"
VirtualizingStackPanel.VirtualizationMode="Recycling" />
</StackPanel>
2、当容器中有数据模板时如果设置Recycling时你会发现数据会产生错行,设置为Standard即可解决问题,因为每行数据容器都是新创建的,所以相比Recycling会有资源浪费
<DataGrid ItemSourcePrimary="{Binding Items}" MinRowHeight="36" SelectionMode="Single" VirtualizingStackPanel.VirtualizationMode="Standard">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Value" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left"
Text="{Binding Value Width="150"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>