2011-08-11 17 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にコレクションを設定し、それは年齢を取るデータ項目のコレクションですデータが入力されます(約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秒待つ必要があります。ヘッダー付きのDataGridのコピーには最大30秒かかります! – 321X

+1

より高速なコピー方法が必要な場合は、独自に実装する必要があります(DataGridは各セルのバインディングを使用しており、処理が非常に遅い)。選択肢に基づいて実行時にLambdaExpresionを作成し、1行分のcsv文字列を作成し、デリゲートするようにコンパイルします。次に、選択したすべての行を繰り返し処理し、適切なクリップボードの内容を設定するために使用することができます – Yurec

+0

コピーヒントをありがとう! – 321X