1
votes

I have a class (Compound) binding to DataGrid. I want to change background color of a cell when a property is set to true. Here is what I tried:

public class Compound : DependencyObject
{
    public static readonly DependencyProperty RSquaredFlagProperty = 
        DependencyProperty.Register("RSquaredFlag", typeof(bool), 
        typeof(Compound), new FrameworkPropertyMetadata(false));

    public bool RSquaredFlag
    {
        get { return (bool)GetValue(RSquaredFlagProperty); }
        set { SetValue(RSquaredFlagProperty, value); }
    }
    ...
}

XAML:

<common:DataGridEx ItemsSource="{Binding}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="R^2" Binding="{Binding RSquared, StringFormat=N3}">
            <DataGridTextColumn.ElementStyle>
                <Style>
                    <Style.Triggers>
                        <Trigger Property="model:Compound.RSquaredFlag" Value="True">
                            <Setter Property="Background" Value="Red"/>
                        </Trigger>                                                
                    </Style.Triggers>
                </Style>                                        
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</common:DataGridEx>

However, with this code, I get a compiler error "Cannot resolve the Style Property 'Background'. Verify that the owning type is the Style's TargetType, or use Class.Property syntax to specify the Property".

What did I miss? How to make it work?

1

1 Answers

2
votes

Change it to Property="TextBlock.Background" or specify a respective TargetType in your style.

I don't think the trigger will work by the way since it will look for the property on the control itself not its DataContext, use a DataTrigger instead.