我有类似下面的代码:
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListView ItemsSource="{Binding FewItems}" />
<ListView ItemsSource="{Binding ManyItems}" Grid.Row="1" />
</Grid>
</ScrollViewer>
我的问题是第二个列表,它非常大。通常,UI虚拟化会发生,但由于它是在滚动查看器和网格中定义的,因此列表会占用所需的空间。当我加载此页面时,这会导致显着的延迟。
设置列表的最大高度没有任何好处,因为它会导致列表在外部滚动查看器中自行滚动。
我的问题是这些:
感谢。
答案 0 :(得分:2)
虚拟化无法像您观察到的那样在滚动视图中工作。查看您的XAML代码,通过创建组合FewItems和ManyItems的中间集合并将该集合绑定到单个ListView,可以很容易地解决您的问题。如果您需要将来自FewItems的项目设置为与ManyItems中的项目不同,那么您可能会遇到一些挑战,但这些可以通过样式选择器等来克服。
答案 1 :(得分:0)
将其声明为 VirtualizingStackPanel 。
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
。 。
示例:强>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Border>
<ScrollViewer>
<ItemsPresenter/>
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="Hello Wworld" />
</DataTemplate>
</ItemsControl.ItemTemplate>