【问题标题】:wpf toolkit datagrid performancewpf 工具包数据网格性能
【发布时间】:2010-12-13 18:27:19
【问题描述】:

我正在将我的应用程序从 Windows 窗体移植到 WPF。我发现 datagrid 只能通过 WPF Toolkit 获得。但是我有一些性能问题。这可能是因为在 windows 窗体中执行得很好的东西在 wpf 中却没有,因为它必须以不同的方式实现。无论如何,我正在做这样的事情:

// XAML
<toolkit:DataGrid x:Name="dataGrid" ItemsSource="{Binding Path=.}"/>


// C#
DataTable dataTable = new DataTable();
MyViewModel viewModel = new MyViewModel();

 this.dataGrid.AutoGenerateColumns = false;
 this.dataGrid.CanUserAddRows = false;
 this.dataGrid.CanUserDeleteRows = false;
 this.dataGrid.CanUserReorderColumns = true;
 this.dataGrid.CanUserResizeColumns = true;
 this.dataGrid.CanUserResizeRows = false;
 this.dataGrid.CanUserSortColumns = true;
 this.dataGrid.IsReadOnly = true;
 this.dataGrid.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
 this.dataGrid.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;

     this.dataGrid.ColumnHeaderHeight = 18;
     this.dataGrid.RowHeight = 18;
     this.dataGrid.DataContext = vm.dataGrid;

    List<string> s = new List<string>();

    for (int i = 0; i < 80; ++i)
    {
        s.Add("col" + i);
    }

    for (int i = 0; i < s.Count; ++i)
    {
        dataTable.Columns.Add(new DataColumn(s[i], typeof(string)));

        Binding items = new Binding();
        PropertyPath path = new PropertyPath(dataTable.Columns[i].ColumnName);
        items.Path = path;

        DataGridColumn dc = new DataGridTextColumn()
        {
            Header = dataTable.Columns[i].ColumnName,
            Width=70,
            Binding = items
        };

        this.dataGrid.Columns.Add(dc);
    }

  viewModel.dataGrid = dataTable;
  this.dataGrid.DataContext = viewModel.dataGrid;

  for (int i = 0; i < 1000; ++i)
  {
      var row = dataTable.NewRow();
      for (int j = 0; j < s.Count; ++j)
      {
          row[s[j]] = "text" + s[j] + j;
      }
      dataTable.Rows.Add(row);
  }

以上是通过绑定每个标题简单生成相同数量的列的示例。 当这个加载时,我得到了正确显示的所有元素,但是滚动真的很慢。我知道有人可能会说我正在渲染 80 列和 1000 个元素,但我的 Windows 窗体应用程序中显示了超过 10000 个元素,并且没有任何问题。 与 Windows 窗体的唯一区别是,每次我更新它时,我都将 dataGridView 的数据源设置为 DataTable,而不是使用绑定。 有任何想法吗?我做错了什么?

【问题讨论】:

    标签: wpf performance datagrid


    【解决方案1】:

    尝试设置 EnableRowVirtualization=True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2011-06-15
      • 2010-10-16
      相关资源
      最近更新 更多