2

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

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

提前致谢。

4

1 回答 1

1

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

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);
}
于 2012-04-12T17:21:29.923 回答