wpf 根据datagrid单元格或行的内容更改其颜色

esyap4oy  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(486)

我通常使用的触发器如下所示。然而,在本例中,我有一个动态数据网格(来自数据库),我不能为静态列设置触发器。

<DataGridTemplateColumn Width="*" Header="Id">
    <DataGridTemplateColumn.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Content, RelativeSource={RelativeSource Self}}" Value="ERROR">
                    <Setter Property="Background" Value="Red"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>

字符串
如何为动态内容设置相同的触发器?我将datagrid内容设置为

private void setEFdatagrid() 
{
    using (FBaseContext context = new FBaseContext())
    {
        var listItems = context.TLoggers.ToList();

        loggerItems = new ObservableCollection<TLogger>(listItems);

        datagridLogger.ItemsSource = loggerItems;
    }               
}

f2uvfpb9

f2uvfpb91#

您的方法是正确的,但是您在DataTrigger绑定中缺少了一个步骤。
内容它不是绑定属性本身的值(我想是TLogger.ID),而是保存该值的ContentControl(例如Textblock)。所以,如果你想正确执行这个绑定,你有两种方法:将DataTrigger绑定到属性,或将其绑定到Content.Text(在文本单元格的情况下)
我认为最简单的解决方案是第二个,所以这段代码可以工作:

<DataGridTemplateColumn Width="*" Header="Id">
<DataGridTemplateColumn.CellStyle>
    <Style TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Content.Text, RelativeSource={RelativeSource Self}}" Value="ERROR">
                <Setter Property="Background" Value="Red"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGridTemplateColumn.CellStyle>

字符串

相关问题