Я протестировал множество вариантов виртуализации и не получил рабочую версию. Я проверил виртуализацию через Snoop, где виртуализированное визуальное дерево содержало только отображаемые элементы, а не виртуализированные содержало все элементы.WrapPanel, отображающий ListView, не виртуализируется
Элемент Items (NumberList) содержит 500 элементов (целые числа 1..500). следующая версия виртуализируется:
<Grid>
<ListView Name="lbDefault" Margin="15,10" Width="300" Height="200"
ItemsSource="{Binding NumberList}"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</Grid>
Следующий код не работает:
<Grid>
<ListView Name="lbDefault" Margin="15,10" Width="300" Height="200"
ItemsSource="{Binding NumberList}"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
VirtualizingPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</Grid>
Есть идеи?
Спасибо, Шай
Там нет, встроенная, версия 'WrapPanel', который поддерживает виртуализацию как есть для' 'StackPanel' и VirtualizingStackPanel' , В основном, когда вы используете виртуализацию WrapPanel, отключена. Вы можете попробовать с помощью ['VirtualizingWrapPanel'] (https://virtualwrappanel.codeplex.com/), но это не идеально и имеет несколько проблем. – dkozl