如何在DataGrid(WPF)中更改行背景颜色?

时间:2015-06-08 12:49:14

标签: c# wpf xaml datagrid

我需要在DataGrid中以某种颜色绘制一些行。

我在主UI线程中创建了集合:

ObservableCollection<SomeElement> col= new ObservableCollection<SomeElement> ();

然后我从其他线程更改它:

int someElementNumber = 1;
int someInputValue = 11;
col[someElementNumber].SomePropery = someInputValue;

我在INotifyPropertyChanged上实施了SomeElement接口,以便我的DataGrid更新该行中的值。但我想检查这个值并依赖于它的某些背景颜色的打印行:

if (someInputValue > 10) {
    //paint row in some color
}

请告诉我如何做到这一点。感谢大家提前帮助!

1 个答案:

答案 0 :(得分:1)

我自己找到答案。如果有人感兴趣的话:

1)在XAML中的Binding上使用DataTrigger CheckProperty。该属性无需显示。

<Window.Resources>
    <Style TargetType="DataGridRow">
        <Style.Triggers>
            <DataTrigger Binding="{Binding CheckProperty}" Value="Success">
                <Setter Property="Background" Value="Green" />
            </DataTrigger>
            <DataTrigger Binding="{Binding CheckProperty}" Value="Error">
                <Setter Property="Background" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

2)在线程中,更新Collection col设置CheckProperty某些值取决于某些条件。

int someElementNumber = 1;
int someInputValue = 11;
col[someElementNumber].SomePropery = someInputValue;
if (someInputValue > 10) {
    col[someElementNumber].CheckProperty = "Success";
}
else {
    col[someElementNumber].CheckProperty = "Error";
}

CheckProperty必须Rise Property changed event

当该属性刚刚更新时,将调用DataTrigger并以某种背景颜色打印当前行,具体取决于条件。