C'est une solution en utilisant un Converter
et ConverterParameter
qui vous permet de définir facilement différents strings
pour différentes Bindings
:
public class BoolToStringConverter : IValueConverter
{
public char Separator { get; set; } = ';';
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
var strings = ((string)parameter).Split(Separator);
var trueString = strings[0];
var falseString = strings[1];
var boolValue = (bool)value;
if (boolValue == true)
{
return trueString;
}
else
{
return falseString;
}
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
var strings = ((string)parameter).Split(Separator);
var trueString = strings[0];
var falseString = strings[1];
var stringValue = (string)value;
if (stringValue == trueString)
{
return true;
}
else
{
return false;
}
}
}
Définir le C onverter comme ceci:
<local:BoolToStringConverter x:Key="BoolToStringConverter" />
Et l'utiliser comme ceci:
<TextBlock Text="{Binding MyBoolValue, Converter={StaticResource BoolToStringConverter},
ConverterParameter='Yes;No'}" />
Si vous avez besoin d'un séparateur différent de celui ;
(par exemple .
), définissez le convertisseur comme ceci:
<local:BoolToStringConverter x:Key="BoolToStringConverter" Separator="." />
Vous avez raison, ce n'est pas une chaîne de format valide pour une valeur booléenne (elle est valide pour les valeurs numériques). Je testais la chaîne de format comme ceci: string.Format ("{0: Yes ;; No}", 1), qui renvoie "Yes", mais string.Format ("{0: Yes ;; No}", true) renvoie "True". Merci –
Pourriez-vous me suggérer, comment utiliser ElementName lors de la liaison en utilisant ce convertisseur? –
@conqenator, ajoutez simplement 'ElementName = xxx', comme une liaison normale –