为什么我的WPF ListView / GridView没有虚拟化?

时间:2016-07-15 09:00:53

标签: c# wpf gridview ui-virtualization

我的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 >

当我查看可视化调试器时,我看到了这个

debugger screen shot

ListViewItem 实例继续获取完整的数据列表,即大约800个点。

当我打开任何ListViewItem对象时,我发现它们已完全填充如下

enter image description here

据我所知,文档说默认情况下,ListBox和ListView都启用了虚拟化。它是否正确?

有什么建议吗?

编辑:这是完整可视化树的屏幕截图: enter image description here

1 个答案:

答案 0 :(得分:0)

我们正在使用MahApps.Metro并将默认的ListView样式设置为 VirtualisedMetroListView虚拟化工作:

<Style BasedOn="{StaticResource VirtualisedMetroListView}" TargetType="ListView" />