根据内容更改数据网格单元格或行颜色

问题描述 投票:0回答:1

我通常使用此方法的触发器,如下所示。但是,在这种情况下,我有一个动态数据网格(来自数据库),无法为静态列设置触发器。

<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>

如何为动态内容设置相同的触发器?我将数据网格内容设置为,

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

        loggerItems = new ObservableCollection<TLogger>(listItems);

        datagridLogger.ItemsSource = loggerItems;
    }               
}
c# wpf xaml entity-framework-core datagrid
1个回答
0
投票

您的方法是正确的,但您在 DataTrigger 绑定中缺少一个步骤。

DataGridCell.Content 它不是有界属性本身的值(我想是 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>
© www.soinside.com 2019 - 2024. All rights reserved.