我通常使用此方法的触发器,如下所示。但是,在这种情况下,我有一个动态数据网格(来自数据库),无法为静态列设置触发器。
<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;
}
}
您的方法是正确的,但您在 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>