2012-04-12 11 views
2

ItemsSourceにバインドされたDataGridコントロールがあります。私のItemsSourceはObservableCollectionであり、私は常にその上に注文したアイテムを挿入します。 DataGridの値とそのインデックスに応じて、DataGridの各行の背景を設定する必要があります。 あなたはそれを行う方法を知っていますか? 注:ObservableCollectionは別のスレッドによって更新されるため、更新時にグリッドの背景色を更新する必要があります。動的行の背景データグリッドSilverlight

コンバーターを使用している人もいますが、私のビジネスロジックはすべてViewModelにあり、色をバックグラウンドにするために値を取得する必要があります。

ありがとうございます。

答えて

1

あなたのDataGridにLoadingRowイベントハンドラを追加し、セットアップ、それぞれの項目のビューモデルのプロパティに、各行の背景プロパティにバインドできます。

XAMLのデータグリッド:

<data:DataGrid ItemsSource="{Binding FooBars}" LoadingRow="dataGrid_LoadingRow" > 
    <data:DataGrid.Columns> 
     <data:DataGridTextColumn Header="FOO" Binding="{Binding Foo}" Width="200" /> 
     <data:DataGridTextColumn Header="BAR" Binding="{Binding Bar}" Width="60"/> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

コードビハインドを:

private void packetsDataGrid_LoadingRow(object sender, DataGridRowEventArgs e) 
{ 
    Binding backgroundBinding = new Binding("FooBarItemBackground"); 
    backgroundBinding.Source = e.Row.DataContext; 
    e.Row.SetBinding(DataGridRow.BackgroundProperty, backgroundBinding); 
} 
+0

たとえば、新しい行を追加すると、下の行をすべて更新して背景を更新する必要があります。 – Augusto

+0

問題はありません:)新しい行が追加されたときに、ビューモデルのイベントをトリガして各アイテムの背景色プロパティを更新する可能性があります。データがバインドされているので、グリッドなどを再バインドする必要はありません。 – KodeKreachor

+1

これは私が使用している方法のように聞こえます – Stainedart