2012-04-12 79 views
2

我有一個DataGrid控件綁定到一個ItemsSource。我的ItemsSource是一個ObservableCollection,它和我總是插入我訂購的項目。我需要根據DataGrid上的值和索引設置DataGrid的每一行的背景。 你知道有什麼辦法嗎? 注意:ObservableCollection將被另一個線程更新,所以當它更新時,我必須更新網格的背景顏色。動態行背景datagrid Silverlight

我見過一些人使用轉換器做類似的事情,但我所有的業務邏輯都在ViewModel中,我需要從它獲取值以發現至極的顏色將成爲背景。

在此先感謝。

回答

1

你可以一個LoadingRow事件處理程序添加到您的DataGrid,然後就各自項目的視圖模型屬性設置一個綁定到每個行的背景屬性:

XAML的DataGrid:

<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 2012-04-12 17:58:33

+0

沒問題:)當添加一個新行可能觸發視圖模型上的事件來更新每個項目的背景顏色屬性。由於它的數據綁定,你不必重新綁定網格或任何東西。 – KodeKreachor 2012-04-12 18:00:43

+1

這聽起來像我使用的方式也應該是要走的路 – Stainedart 2012-04-12 18:23:03