问题:在可滚动区域中显示大量数据时,性能和用户体验非常糟糕。
尝试过的方法:基本上,在 ListBox 中设置 DataTemplate 来显示填充数据的网格,并将 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个数据绑定TextBlock组成的填充项的整体布局。
这样可以正常工作,并将初始加载减半。然而,现在的问题是,我需要能够不固定高度,以便它占用父元素中可用的空间甚至可以调整大小。感谢@DanFox
,我发现你必须以一种形式或另一种方式固定高度才能调用虚拟化,否则RenderEngine会认为它有无限的空间。
问题是:有更好的方法吗?或者至少如何修复当前技术以实现更好的用户体验?我正在生成数百个这些项,因此需要虚拟化的性能增强。但是我也需要允许用户调整窗口大小并保留有效滚动的能力。
任何见解都将不胜感激,谢谢和节日快乐!