WPF datagrid绑定太慢了

时间:2012-07-03 10:43:39

标签: c# wpf xaml .net-4.0

在我的WPF应用程序中,我使用动态列数生成datagrid。 部分代码:

for (var i = datetime; i < datetime.AddDays(1); i+= TimeSpan.FromHours(1)){
    var column = new DataGridTemplateColumn();
    column.Header = (i+1).ToString();
    column.CellTemplate = (DataTemplate)XamlReader.Load(
            new MemoryStream(Encoding.Default.GetBytes(
                @"<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><TextBlock Text='{Binding Values[" + i + @"]." + propName + @"}'/></DataTemplate>"
            ))); 
    column.CellEditingTemplate = (DataTemplate)XamlReader.Load(
            new MemoryStream(Encoding.Default.GetBytes(
                @"<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><TextBox Text='{Binding Values[" + i + @"]." + propName + @", Mode=TwoWay}'/></DataTemplate>"
            ))); 
    dataGrid1.Columns.Add(column);
}
dataGrid1.ItemsSource = data;

<DataGrid EnableColumnVirtualization="true" EnableRowVirtualization="true" Name="dataGrid1" DockPanel.Dock="Top" AutoGenerateColumns="False" 
                   Height="120" Width="Auto" />

当我的表包含25列和10行时,它渲染得太慢(1秒)。 如何提高数据绑定的性能?

1 个答案:

答案 0 :(得分:1)

您应该为所有列使用相同的数据模板实例。

只需将XamlReader.Load()调用移到循环之外,并对所有列使用相同的实例:

var cellTemplate = (DataTemplate)XamlReader.Load(...);
var cellEditTemplate = (DataTemplate)XamlReader.Load(...);
for(...)
{
   //..
   column.CellTemplate = cellTemplate;
   column.CellEditingTemplate = cellEditTemplate;
   //...
}