Je l'ai fait en utilisant un simple convertisseur sur une propriété du modèle de vue, par exemple disons que vous aviez une propriété booléenne que vous vouliez contrôler un style que vous pourriez faire cela.
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
}
alors comme une ressource que vous définiriez vos deux styles ...
<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>
alors vous appliquer à votre objet comme celui-ci ...
<TextBlock Text="{Binding Description}"
Margin="20,4,4,4"
Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock>
Où est IsConfirmed une propriété booléenne sur le viewmodel, cela permettra également de garder le style en synchronisation si la propriété IsConfirmed
change. Si vous voulez utiliser une condition plus compliquée qu'une booléenne, vous pouvez toujours créer un dictionnaire d'objets à Styles dans votre convertisseur, puis demander au convertisseur de faire une recherche, mais j'ai trouvé que les booléens fonctionnent généralement dans la plupart des cas.
Tout à fait logique, bravo! – deanvmc