Я сделал это, используя простой конвертер по свойству модели вида, например, скажем, что у вас есть логическое свойство, которым вы хотели управлять стилем, которым вы могли бы это сделать.
public class BoolToStyleConverter : IValueConverter
{
public Style TrueStyle{ get; set; }
public Style FalseStyle{ get; set; }
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((bool)value) ? TrueStyle : FalseStyle;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
тогда как ресурс, вы должны определить свои два стиля ...
<common:BoolToStyleConverter x:Key="BoldTextConverter">
<common:BoolToStyleConverter.TrueStyle>
<Style TargetType="TextBlock">
<Setter Property="FontWeight"
Value="Bold"></Setter>
</Style>
</common:BoolToStyleConverter.TrueStyle>
<common:BoolToStyleConverter.FalseStyle>
<Style TargetType="TextBlock">
<Setter Property="FontWeight"
Value="Normal"></Setter>
</Style>
</common:BoolToStyleConverter.FalseStyle>
</common:BoolToStyleConverter>
, то вы бы применить его к объекту, как это ...
<TextBlock Text="{Binding Description}"
Margin="20,4,4,4"
Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock>
Где IsConfirmed является логическое свойство на viewmodel, это также сохранит стиль в синхронизации, если изменяется свойство IsConfirmed
.
Если вы хотите использовать более сложное условие, чем логическое, вы всегда можете создать словарь объектов для стилей в вашем конвертере, а затем сделать конвертер для поиска, но я обнаружил, что в большинстве случаев обычно работают boolean.
Идеальный смысл, ура! – deanvmc