2011-08-11 103 views
2

我的數據網格有一些編程添加的列。WPF DataGrid綁定性能問題

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

被設置爲數據網格的項目源的收集是數據項的集合

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,它需要年齡在DataGrid以前一直有時候(有大約25列)填充數據,長達30秒或更長!

我的XAML是很乾淨:

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

是否有任何提示,以提高這種結合的表現? 如果我刪除綁定,在創建列時,它會執行正常!

+0

是否在設置ItemsSource之前或之後添加列? –

+0

我在設置itemssource之前添加它們 – 321X

回答

4

請嘗試設置EnableColumnsVirtualizationEnableRowVirtualization屬性爲true,至少這會提高羣體的性能,儘管滾動仍然會很慢。

+0

這確實是一個輕微的性能提升!感謝您的提示,但我仍然需要等待大約15秒。使用標題複製數據網格最多需要30秒! – 321X

+1

如果你需要更快的複製方法,你需要自己實現它(DataGrid使用綁定解析每個單元格,這是非常緩慢的過程)。正如快速的想法 - 在運行時創建LambdaExpresion,基於選擇,它爲一行形成csv字符串並編譯爲委託。然後它可以用於遍歷所有選定的行並設置適當的剪貼板內容 – Yurec

+0

感謝您的複製提示! – 321X