我在使用列表视图/网格视图时遇到了性能问题。
我追踪发现视图没有被虚拟化。我移除了所有关键业务代码,只剩下以下XAML。
<UserControl x:Class="Weingartner.Controls.PointListEditorView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
x:Name="Root">
<Grid>
<ListView ItemsSource="{Binding ElementName=Root, Path=Points, Mode=OneWay}">
<ListView.View>
<GridView >
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Label>Foo</Label>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</UserControl >
当我查看可视化调试器时,我看到了这个。 ListViewItem实例覆盖整个数据列表,大约有800个点。
当我打开任何ListViewItem对象时,我可以看到它们完全填充如下。 据我所知,文档中说ListBox和ListView默认开启虚拟化。这是正确的吗?
有什么建议吗?
编辑:这是完整可视树的屏幕截图:
![enter image description here](https://istack.dev59.com/4E3Sv.webp)
ScrollViewer
吗? - Eli Arbel<ListView VirtualizingStackPanel.IsVirtualizing="True">
,它是否有效? - Eli Arbel