Правильное использование VirtualizingStackPanel в WPF

Может кто-нибудь сказать мне, как правильно использовать VirtualizingStackPanel в WPF? Я установил VirtualizingStackPanel в своем ItemsPanelTemplate для своего ItemsControl и установил его как свой ItemsHost, но когда я регистрирую прослушиватель для присоединенного события CleanUpVirtualizedItem в моем элементе управления, ничего не происходит. Я не вижу вызова события. Я также не вижу каких-либо событий Unloaded в пользовательских элементах управления в моем шаблоне данных, которые вызываются, что указывает мне на отсутствие фактической виртуализации. Любая помощь приветствуется.


person Alex Marshall    schedule 25.01.2011    source источник
comment
Для всех, кто читал это в будущем, ключевым моментом было то, что ItemsPresenter находится под ScrollViewer, в ControlTemplate для ItemsControl.   -  person Alex Marshall    schedule 25.01.2011


Ответы (1)


Вместо этого попробуйте использовать ListBox или ListView:

<ListBox ItemsSource="{Binding Items}"
    VirtualizingStackPanel.VirtualizationMode="Recycling" 
    VirtualizingStackPanel.CleanUpVirtualizedItem="ItemsControl_CleanUpVirtualizedItem">
</ListBox>

ListBox будет автоматически обрабатывать виртуализацию элементов — немного больше ручной работы, если вы создадите VirtualizingStackPanel напрямую. Это связано с тем, что Шаблон ControlTemplate по умолчанию для ItemsControl не имеет ScrollViewer, который является ключом к виртуализации – дополнительная информация здесь.

person Greg Sansom    schedule 25.01.2011