私は次のリストボックスを持っています:
<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個までのアイテムをロードするのに非常に長い時間がかかり、2番目に、コントロールコンストラクターでブレークポイントにヒットすると-700回呼び出されることがわかります:
public static int Counter = 0;
public SpecPackageSpecGroupControl()
{
InitializeComponent();
Counter++;
if (Counter%100 == 0)
Console.WriteLine("Hi");
}
Console.WriteLine("Hi") でブレーク ポイントを設定すると、静的カウンターが 700 に達したことがわかります。
したがって、これは仮想モードですが、基本的に UIElements が作成されています。
仮想化モードを誤解していますか、それとも何か間違っていますか?