动态行背景datagrid Silverlight

时间:2012-04-12 16:33:12

标签: silverlight datagrid background-color

我有一个绑定到ItemsSource的DataGrid控件。我的ItemsSource是一个ObservableCollection,它总是插入我订购的物品。我需要根据DataGrid上的值及其索引设置DataGrid的每一行的背景。 你知道怎么办? 注意:ObservableCollection将由另一个线程更新,因此当它更新时,我必须更新网格的背景颜色。

我看到有些人使用转换器做类似事情,但我的所有业务逻辑都在ViewModel中,我需要从中获取值以发现颜色将是背景。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以向DataGrid添加一个LoadingRow事件处理程序,然后在各自项目的视图模型属性上设置每行的Background属性的绑定:

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);
}