Вы можете привязать свойство Style к изменяющемуся свойству вашего объекта и затем использовать ValueConverter
для возврата правильного стиля, например, когда свойство является логическим:
public class StyleSelectionConverter : IValueConverter
{
public Style OnStyle { get; set; }
public Style OffStyle { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool input = (bool)value;
if (input)
{
return OnStyle;
}
else
{
return OffStyle;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
Пример использования:
<ListView.Resources>
<Style x:Key="OnStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="LightGreen"/>
<Setter Property="Foreground" Value="Green"/>
</Style>
<Style x:Key="OffStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="Pink"/>
<Setter Property="Foreground" Value="DarkRed"/>
</Style>
<local:StyleSelectionConverter x:Key="StyleSelectionConverter"
OnStyle="{StaticResource OnStyle}"
OffStyle="{StaticResource OffStyle}"/>
</ListView.Resources>
...
<GridViewColumn Header="Is Active">
<GridViewColumn.CellTemplate>
<DataTemplate>
<DataTemplate.Resources>
</DataTemplate.Resources>
<TextBlock Style="{Binding IsActive, Converter={StaticResource StyleSelectionConverter}}"
Text="{Binding IsActive}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>