为什么我的 WPF ListView/GridView 没有虚拟化?
Why does my WPF ListView/GridView not virtualize?
我的 listview/gridview 有性能问题。
我将其追溯到未被虚拟化的视图。我删除了所有业务关键代码并留下了以下 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 默认启用虚拟化。这个对吗?
有什么建议吗?
编辑:这是完整可视化树的屏幕截图:
我们正在使用 MahApps.Metro 并将默认的 ListView 样式设置为
VirtualisedMetroListView 虚拟化工程:
<Style BasedOn="{StaticResource VirtualisedMetroListView}" TargetType="ListView" />
我的 listview/gridview 有性能问题。
我将其追溯到未被虚拟化的视图。我删除了所有业务关键代码并留下了以下 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 默认启用虚拟化。这个对吗?
有什么建议吗?
编辑:这是完整可视化树的屏幕截图:
我们正在使用 MahApps.Metro 并将默认的 ListView 样式设置为 VirtualisedMetroListView 虚拟化工程:
<Style BasedOn="{StaticResource VirtualisedMetroListView}" TargetType="ListView" />