XAML : Comment utiliser un ConverterParameter qui ne soit pas de type string dans le XAML ?
Imaginons le cas suivant : j’ai un TextBox et un TextBlock ainsi qu’une propriété booléenne IsEditing. Si IsEditing est vraie alors la TextBox doit être visible et le TextBlock caché et inversement.
Je pourrais bien entendu utiliser un ViewModel avec deux propriétés de type Visibility et le problème serait résolu.
Cependant dans le cas de ce post, je vais utiliser les Converters.
Le problème c’est que je n’ai qu’une seule propriété booléenne et que la propriété Visibility des deux controles seront bindés dessus.
Je vais donc utiliser le ConverterParameter pour les différencier.
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((bool)value ^ (parameter != null && (bool)parameter)) ? Visibility.Visible : Visibility.Collapsed;
}
Le problème maintenant c’est que si je fais mon binding comme ceci :
Visibility="{Binding IsEditing, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=True}"
je vais avoir un soucis car le parameter sera une chaine de caractère au lieu d’être un booléen.
Je peux bien entendu résoudre ceci en faisant mon binding par code mais ce n’est pas le but de ce post.
Alors comment le faire en xaml ?
Comme ceci :
<TextBlock.Visibility>
<Binding Path="IsEditing"
Converter="{StaticResource BooleanToVisibilityConverter}">
<Binding.ConverterParameter>
<system:Boolean>True</system:Boolean>
</Binding.ConverterParameter>
</Binding>
</TextBlock.Visibility>
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :