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