在WPF中正确使用VirtualizingStackPanel

Ale*_*all 2 wpf itemspanel virtualizingstackpanel

有人可以告诉我如何在WPF中正确使用VirtualizingStackPanel吗?我在ItemsPanelTemplate中为我的ItemsControl设置了一个VirtualizingStackPanel,并将其设置为我的ItemsHost,但是当我在我的item控件上注册一个CleanUpVirtualizedItem附加事件的监听器时,没有任何反应.我没有看到事件被调用.我也没有看到我的数据模板中的自定义控件上的任何Unloaded事件被调用,这表明我没有实际的虚拟化.任何帮助将非常感激.

Gre*_*som 5

请尝试使用ListBox或ListView:

<ListBox ItemsSource="{Binding Items}"
    VirtualizingStackPanel.VirtualizationMode="Recycling" 
    VirtualizingStackPanel.CleanUpVirtualizedItem="ItemsControl_CleanUpVirtualizedItem">
</ListBox>
Run Code Online (Sandbox Code Playgroud)

ListBox将自动处理项目的虚拟化 - 如果直接创建VirtualizingStackPanel,还需要做一些手动工作.这是因为ItemsControl的默认ControlTemplate没有ScrollViewer,这是虚拟化的关键 - 这里有更多信息.