我有以下列表框:
<ScrollViewer>
<!--Spec Definitions-->
<ListBox DataContext="{Binding SpecPackageSpecGroupListViewModel}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.IsDeferredScrollingEnabled="True"
ItemContainerStyle="{StaticResource SpecPackageSpecGroupListBoxStyle}"
ItemsSource="{Binding SortedChildren}"
Background="Transparent"
BorderThickness="0" SelectionMode="Extended"
Margin="5,5,5,5">
<ListBox.ItemTemplate>
<DataTemplate>
<Controls:SpecPackageSpecGroupControl/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
这个列表框应该包含大约 1000 个项目,但很复杂。我希望它与 VirtualizingStackPanel 一起使用,因此我将可视化 XAML 配置设置为:
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
我的问题是我认为它不起作用-首先-加载〜700个项目需要很长时间,其次,当我在控件构造函数上遇到断点时-我可以看到它被调用了700次:
public static int Counter = 0;
public SpecPackageSpecGroupControl()
{
InitializeComponent();
Counter++;
if (Counter%100 == 0)
Console.WriteLine("Hi");
}
我在 Console.WriteLine("Hi") 上断点,我可以看到静态计数器达到 700。
因此,尽管这是一种虚拟模式,但基本上正在创建 UIElement。
我误解了虚拟化模式,还是我做错了什么?