【问题标题】:WPF DataGrid Binding Performance IssueWPF DataGrid 绑定性能问题
【发布时间】:2011-08-11 11:58:46
【问题描述】:

我的数据网格有许多以编程方式添加的列。

dgData.Columns.Add(new DataGridTextColumn { Width=50, Header = e.Naam, Binding = new Binding(String.Format("Figures[{0}]", e.Id)) });

设置为数据网格的item source的collection是Data items的collection

public class Data
{
    private string _set = "";
    public string Set
    {
        get { return _set; }
        set { _set = value; }
    }

    private Dictionary<long, int> _figures;
    public Dictionary<long, int> Figures
    {
        get { return _figures; }
        set { _figures = value; }
    }
}

当我将集合设置为 itemssource 时,数据网格需要很长时间才能填充数据,有时(大约 25 列)长达 30 秒或更长时间!

我的 XAML 非常干净:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Name="dgData">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Set" Binding="{Binding Set}" Width="100"/>
    </DataGrid.Columns>
</DataGrid>

是否有任何提示可以提高此绑定的性能? 如果我删除绑定,在创建列时,它会正常运行!

【问题讨论】:

  • 你是在设置 ItemsSource 之前还是之后添加列?
  • 我在设置 itemssource 之前添加它们

标签: c# wpf performance data-binding datagrid


【解决方案1】:

请尝试将EnableColumnsVirtualizationEnableRowVirtualization 属性都设置为true,至少这会提高人口性能,尽管滚动仍然会很慢。

【讨论】:

  • 这确实是一个小小的性能提升!感谢您的提示,但我仍然需要等待大约 15 秒。复制带有标题的数据网格最多需要 30 秒!
  • 如果您需要更快的复制方法,您需要自己实现(DataGrid 对每个单元格使用绑定解析,这是一个非常缓慢的过程)。同样快速的想法 - 在运行时创建 LambdaExpression,基于选择,它为一行形成 csv 字符串并编译为委托。然后它可以用于遍历所有选定的行并设置适当的剪贴板内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2011-08-15
  • 1970-01-01
  • 2011-03-19
  • 2011-04-10
  • 2023-04-05
相关资源
最近更新 更多