Que diriez-vous celui-ci:
Créer un convertisseur pour booléens:
class BooleanValueInverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(parameter is IValueConverter))
{
if (value is bool)
return !(bool)value;
else
return DependencyProperty.UnsetValue;
}
else
{
IValueConverter converter = (IValueConverter)parameter;
if (value is bool)
{
bool input = !(bool)value;
return converter.Convert(input, targetType, null, culture);
}
else
{
return DependencyProperty.UnsetValue;
}
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
dans l'importation de XAML l'espace de noms où la classe onduleur est mis en œuvre:
xmlns:util="clr-namespace:MyApp.Utilities"
Dans la section des ressources ajouter référence la classe d'inverseur:
<util:BooleanValueInverter x:Key="Inverter" />
Et puis il suffit d'utiliser simplement comme ceci:
<TextBox Text="{Binding Path=TextProperty}" IsEnabled="{Binding SomeBoolPropertyToInvert, Converter={StaticResource Inverter}}"/>
Ouais ... Je pensais à ce sujet, mais je tente de voir s'il y a une approche plus directe. – SiN
À mesure que vous utilisez de plus en plus WPF, vous constaterez que vous créez un ensemble de convertisseurs plutôt sophistiqué et que leur conception est généralement très réutilisable. En fait, j'ai un NegateConverter mais c'est beaucoup plus robuste que mon exemple. Il nie les nombres, les booléens, la visibilité, l'épaisseur, etc. Un seul d'environ une douzaine de convertisseurs que j'utilise fréquemment. – Josh
Josh: Comment annuler une épaisseur? – Gabe