2012-04-12 81 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