【问题标题】:Why does my WPF ListView/GridView not virtualize?为什么我的 WPF ListView/GridView 没有虚拟化?
【发布时间】:2016-07-15 09:00:52
【问题描述】:

我的列表视图/网格视图存在性能问题。

我将其追溯到未虚拟化的视图。我删除了所有关键业务代码,并留下了以下 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 默认启用虚拟化。这个对吗?

有什么建议吗?

编辑:这是完整视觉树的屏幕截图:

【问题讨论】:

  • 您的用户无法控制什么?是否有可能在ScrollViewer 内?
  • UserControl 位于 TabControl 中,而 TabControl 位于 DockPanel 中。
  • 上面的代码确实是虚拟化的,所以它必须是它外部环境中的东西。或者您使用的是低于 4 的 WPF 版本?
  • 我使用的WPF版本是4.0.30319。
  • 指定&lt;ListView VirtualizingStackPanel.IsVirtualizing="True"&gt;是否有效?

标签: c# wpf gridview ui-virtualization


【解决方案1】:

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

&lt;Style BasedOn="{StaticResource VirtualisedMetroListView}" TargetType="ListView" /&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2014-08-02
    • 2020-08-26
    相关资源
    最近更新 更多