我有一个绑定到ItemsSource的DataGrid控件。我的ItemsSource是一个ObservableCollection,它总是插入我订购的物品。我需要根据DataGrid上的值及其索引设置DataGrid的每一行的背景。 你知道怎么办? 注意:ObservableCollection将由另一个线程更新,因此当它更新时,我必须更新网格的背景颜色。
我看到有些人使用转换器做类似事情,但我的所有业务逻辑都在ViewModel中,我需要从中获取值以发现颜色将是背景。
提前致谢。
答案 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);
}