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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам