Ich habe dies mit einem einfachen Konverter auf eine Eigenschaft des Ansichtsmodells getan, zum Beispiel haben Sie eine boolesche Eigenschaft, die Sie einen Stil steuern wollten, könnten Sie dies tun.
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
}
dann als Ressource Sie zwei Arten definieren würde ...
<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>
dann würden Sie es wie folgt auf Ihr Objekt anwenden ...
<TextBlock Text="{Binding Description}"
Margin="20,4,4,4"
Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock>
Wo IsConfirmed ist eine boolesche Eigenschaft auf dem Viewmodel. Dadurch wird der Style auch synchronisiert, wenn sich die IsConfirmed
-Eigenschaft ändert.
Wenn Sie eine kompliziertere Bedingung als einen booleschen verwenden möchten, könnten Sie immer ein Dictionary von Objekten zu Styles in Ihrem Konverter erstellen und dann den Konverter nachschlagen lassen, aber ich habe herausgefunden, dass in den meisten Fällen boolesche Operationen funktionieren.
Macht perfekten Sinn, Prost! – deanvmc