WPF DataGrid与ListView性能对比与场景选择

开门见山的说

性能对比:

在Demo中,DataGrid与ListView默认开启虚拟化(可以理解为动态渲染,类似懒加载只渲染屏幕可以看见的地方)

DataGrid渲染10列50行随机字符280ms

ListView渲染10列50行随机字符80ms

场景选择:

ListView只生成需要展示的数据类型的控件,渲染相对DataGrid要快很多

DataGrid会生成编辑两种状态单元格(编辑与非编辑),如非必要不推荐使用(编辑单元格WPF硬伤/(ㄒoㄒ)/~~)

UI效果图:

Code:

XAML

    
        
            
            
        
        
            
            
            
            
            
            
            
        
        
            
                
                    
                        
                            
                        
                    
                    
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                    
                
            
            
                
                    
                        
                            
                        
                    
                    
                        
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                        
                    
                
            
        
    

后台

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows;

namespace WPFDemo
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            view = new MainWindowView();
            view.DgList = new System.Collections.ObjectModel.ObservableCollection();
            this.DataContext = view;
            InitData();
        }
        MainWindowView view;
        private void InitData()
        {
            var list = new List();
            Random rd = new Random();
            for (int i = 0; i < 50; i++)
            {
                var item = new DgModel();
                item.F1 = rd.Next().ToString();
                item.F2 = rd.Next().ToString();
                item.F3 = rd.Next().ToString();
                item.F4 = rd.Next().ToString();
                item.F5 = rd.Next().ToString();
                item.F6 = rd.Next().ToString();
                item.F7 = rd.Next().ToString();
                item.F8 = rd.Next().ToString();
                item.F9 = rd.Next().ToString();
                item.F10 = rd.Next().ToString();
                list.Add(item);
            }
            Stopwatch ms = new Stopwatch();
            ms.Restart();
            view.DgList = new System.Collections.ObjectModel.ObservableCollection(list);
            ms.Stop();
            view.DgMs = ms.ElapsedMilliseconds.ToString();
            ms.Restart();
            view.LvList = new System.Collections.ObjectModel.ObservableCollection(list);
            ms.Stop();
            view.LvMs = ms.ElapsedMilliseconds.ToString();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            InitData();
        }
    }
}

相关回答:

ListView和ListBox的区别?(ListView是数据表格,ListBox是类似Tree的单选列表)

博主使用的是第三方开源控件HandyControl(强烈安利)

博客园空间不足,Demo加群下载

#感谢您访问本站#
#本文转载自互联网,若侵权,请联系删除,谢谢!657271#qq.com#