WPF 解决数据量大造成页面卡顿

最近做一个项目,使用datagrid动态绑定并扩展行列,数据量大概两万条,加载后发现页面近乎卡死状态,查找资料发现是wpf页面渲染问题,以下是解决方案

datagrid控件添加属性VirtualizingPanel.VirtualizationMode="Recycling" EnableRowVirtualization="True" VirtualizingPanel.IsVirtualizing="True" EnableColumnVirtualization="True" VirtualizingPanel.IsContainerVirtualizable="True"

发现页面显示非常快,了解了一下是WPF中的虚拟化技术

相关文章https://www.cnblogs.com/yang-fei/p/6139723.html

1. Data Virtualization 通常情况下我们说数据虚拟化是指数据源没有完全加载,仅加载当前需要显示的数据呈现给用户。这种场景会让我们想到数据分页显示,当需要特定页面的数据时,根据页数请求相应数据。

WPF没有提供对Data Virtualization原生态的支持,当时我们可以使用Paging相关技术来实现。在我先前的博客WPF 实现 DataGrid/ListView 分页控件中有介绍。

2. UI Virtualization 是针对数据容器渲染数据项的一个优化。举个例子,一个ListView/ListBox控件中有10000个Item,但是可见的只有10个,那么此时只渲染并显示这10个Item,剩余的9990个Item不实例化和显示。这样可以提高程序的性能。

使用此解决方案发现问题是当我遍历获取datagrid中Cell的时候获取不到,原因是除了当前页面展示cell实例化了 其余并未实例化,所以并不能获取其他cell

当你使用了此方案,但你又需要操作cell,我是动态代码绑定了datatrigger

   Style style = new Style();
            style.TargetType = typeof(TextBox);
            DataTrigger dataTrigger = new DataTrigger();
            dataTrigger.Binding = new Binding
            {
                Path = new PropertyPath("Text"),
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Mode = BindingMode.TwoWay,
                RelativeSource = RelativeSource.Self,
            };
            dataTrigger.Value = "'";
            dataTrigger.Setters.Add(new Setter(FrameworkElement.VisibilityProperty, Visibility.Hidden));
            style.Triggers.Add(dataTrigger);
            textBox.SetValue( StyleProperty, style);

你可能感兴趣的:(WPF,wpf,html)