根据对象的布尔属性更改数据绑定的WPF Datagrid行背景/前景颜色

时间:2018-08-05 12:09:43

标签: wpf datagrid row

我在WPF应用程序中有一个Datagrid(使用MVVM {Caliburn Micro}),它绑定到类型ObservableCollection<Student>的属性,其中Student类看起来像这样:

public class Student
{
    public int ID { get; set; }
    public String FullName { get; set; }
    public bool Passed { get; set; }
}

根据事实-学生是否通过了考试-我想将相应学生的行的背景/前景更改为红色(如果未通过)。

下面显示了我的DataGrid:

<DataGrid Grid.Column="1"
              RowBackground="White"
              Visibility="Visible"
              Grid.Row="15"
              ColumnWidth="auto"
              IsReadOnly="False"
              AutoGenerateColumns="False"
              BorderBrush="{StaticResource GridBorder}"
              VerticalScrollBarVisibility="Auto"
              HorizontalGridLinesBrush="LightGray"
              HorizontalScrollBarVisibility="Disabled"
              VerticalGridLinesBrush="LightGray"
              Name="Students"
              CanUserAddRows="True"  
              BorderThickness="0.8"
              SelectionUnit="FullRow"
              cal:Message.Attach="[Event MouseDoubleClick] = [Action GetRow($dataContext)]"
              SelectionMode="Single" Grid.ColumnSpan="4">   

这些是“定义”列:

<DataGridTextColumn Binding="{Binding ID}" Header="PersonalNumber"/>
<DataGridTextColumn Binding="{Binding FullName}" Header="FullName"/>

为解决这个问题,我尝试了类似的方法,但是不起作用:

<DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Passed}" Value="false">
                        <Setter Property="Background" Value="Red"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Passed}" Value="true">
                        <Setter Property="Background" Value="Black"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>

我该怎么办?

1 个答案:

答案 0 :(得分:0)

您的DataGrid正在设置RowBackground="White",该设置将覆盖RowStyle,请删除该设置,然后Style将按照您期望的方式运行。