L'ho fatto utilizzando un semplice convertitore su una proprietà del modello di visualizzazione, ad esempio diciamo che avevi una proprietà booleana che volevi controllare uno stile che potevi fare.
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
}
quindi come una risorsa definireste i vostri due stili ...
<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>
allora si dovrebbe applicare al vostro oggetto come questo ...
<TextBlock Text="{Binding Description}"
Margin="20,4,4,4"
Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock>
Dove IsConfirmed è una proprietà booleana sul viewmodel, questo manterrà anche lo stile sincronizzato se la proprietà IsConfirmed
cambia.
Se si desidera utilizzare una condizione più complessa di un booleano, è sempre possibile creare un dizionario di oggetti in Stili nel convertitore e quindi fare in modo che il convertitore esegua una ricerca, ma ho riscontrato che in genere i booleani funzionano nella maggior parte dei casi.
Ha perfettamente senso, evviva! – deanvmc