Проблема: Отображение больших объемов данных в прокручиваемой области имеет ужасную производительность и/или пользовательский опыт.
Пробовал: В основном задан DataTemplate в ListBox, чтобы показать сетку заполненных данных с параметром VirtualizationMode, установленным в Recycle, и фиксированной высотой, установленной в ListBox. Что-то вроде приведенного ниже примера.
<ListBox x:Name="Items"
TabNavigation="Once"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Height="500">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,5">
<HyperlinkButton Content="Action" Margin="5"/>
<ContentControl
cal:View.Model="{Binding}"
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ContentControl будет приносить стандартное <Grid>
из другого представления, которое форматирует общий макет заполненных элементов, состоящий из 20 статических и 20 привязанных к данным TextBlocks.
Это работает хорошо, и вырезать начальные нагрузки пополам. ОДНАКО, теперь проблема в том, что мне нужно, чтобы высота НЕ была фиксированным размером, поэтому она занимает пространство, доступное в своем родителе, и даже может быть изменено. Благодаря @DanFox
я обнаружил, что вам нужно исправить высоту в той или иной форме, чтобы вызвать виртуализацию, или RenderEngine просто думает, что в любом случае у нее бесконечная комната.
Вопрос: Есть ли лучший способ сделать это, или как я могу по крайней мере исправить текущую технику, чтобы обеспечить лучший UX? Я генерирую потенциально сотни этих элементов, поэтому мне нужно повысить производительность виртуализации. Однако мне также необходимо разрешить пользователю изменять размер окна и сохранять возможность прокрутки эффективно.
Любое понимание очень ценится, спасибо и счастливые праздники!