Попробуйте вместо этого использовать ListBox или ListView:
<ListBox ItemsSource="{Binding Items}"
VirtualizingStackPanel.VirtualizationMode="Recycling"
VirtualizingStackPanel.CleanUpVirtualizedItem="ItemsControl_CleanUpVirtualizedItem">
</ListBox>
ListBox автоматически обрабатывает виртуализацию элементов - если вы создадите VirtualizingStackPanel напрямую, вам придется немного больше поработать вручную. Это связано с тем, что ControlTemplate по умолчанию для ItemsControl не имеет ScrollViewer, который является ключом к виртуализации - дополнительная информация здесь .