WPF Trigger when Property and Data value are true

KrisTrip picture KrisTrip · May 27, 2010 · Viewed 8.4k times · Source

I need to be able to change the Style of a control when a property and data value are true. For example, my bound data has an IsDirty property. I would like to change the background color of my control when IsDirty is true AND the control is selected. I found the MultiTrigger and MultiDataTrigger classes...but in this case I need to somehow trigger on data and property. How can I do this?

Another note: I need to be able to do this in code behind not XAML.

Answer

Samuel Jack picture Samuel Jack · May 27, 2010

MultiDataTrigger works just as well for DependencyProperties as it does for ordinary properties. Just set the Path in the binding to the name of your dependency property.

You will need to be careful about setting the source of that binding though, since by default the source is the DataContext of the element to which the trigger is attached. If the trigger is used in a style on the selectable object, your can use the RelativeSource property of the Binding:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding Path=IsDirty}" Value="True" />
      <Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
    </MultiDataTrigger.Conditions>
    <Setter Property="Background" Value="Cyan" />
  </MultiDataTrigger>