Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

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 :

Publié jeudi 26 août 2010 21:19 par Matthieu MEZIL

Commentaires

# re: XAML : Comment utiliser un ConverterParameter qui ne soit pas de type string dans le XAML ? @ vendredi 27 août 2010 09:46

Ok mais la syntaxe est alors plutôt chiante en XAML (surtout pour ce genre de Converter très souvent utilisé).

Moi, je garde la syntaxe ConverterParameter = True et c'est mon BooleanToVisibilityConverter qui convertit la chaîne de caractère en booléen.

kakone

# re: XAML : Comment utiliser un ConverterParameter qui ne soit pas de type string dans le XAML ? @ vendredi 27 août 2010 10:05

@ Stéphane : Le problème avec True en string c'est que c'était trop simple pour faire un post. lol

Matthieu MEZIL

# re: XAML : Comment utiliser un ConverterParameter qui ne soit pas de type string dans le XAML ? @ vendredi 27 août 2010 10:06

Enfin, pour être exact, je ne le convertit pas, je regarde juste si parameter.Equals("True")

kakone

# re: XAML : Comment utiliser un ConverterParameter qui ne soit pas de type string dans le XAML ? @ vendredi 27 août 2010 10:07

C'est vrai que la syntaxe n'est pas connue, mais elle est aussi rarement (voir jamais) utilisée :-)

kakone

# re: XAML : Comment utiliser un ConverterParameter qui ne soit pas de type string dans le XAML ? @ lundi 19 décembre 2011 13:04

Si la syntaxe verbeuse vous ennuie comme moi, créez une MarkupExtension :

   public class SystemBooleanExtension : MarkupExtension

   {

       private string _value;

       public SystemBooleanExtension(string value)

       {

           _value = value;

       }

       public override object ProvideValue(IServiceProvider serviceProvider)

       {

           bool result;

           if(Boolean.TryParse(_value, out result) == false)

               throw new InvalidOperationException("Provided value is not boolean convertible");

           return result;

       }

   }

Et dans votre Xaml, vous n'avez plus qu'à l'utiliser :

ConverterParameter="{ext:SystemBoolean True}"

tbayart

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [TechDays2012] Oui j’y serai! par Blog de Jérémy Jeanson le il y a 12 heures et 45 minutes

- TFS Integration Tools – Suivi des synchronisations avec Reporting Services par Vivien Fabing le 02-05-2012, 17:46

- CSS Content State Selectors (Personnal Draft) par Le blog de FremyCompany le 02-04-2012, 15:38

- MBA : Pourquoi faire et comment le choisir ? par Blog Technique de Romelard Fabrice le 02-03-2012, 14:22

- Y'a des erreurs qui peuvent rendre le développeur violent par Aleks's Blog le 02-02-2012, 16:33

- [Hyper-V 3] Présentation des commandlets PowerShell par Blog de SPBrouillet (Pierrick BROUILLET) le 01-31-2012, 16:01

- IIS7 – Compression GZIP par Atteint de JavaScriptite Aiguë [Cyril Durand] le 01-31-2012, 15:52

- SharePoint 15 Technical Preview Managed Object Model Software Development Kit par Matthew le 01-31-2012, 12:34

- Office 15 Technical Preview - Open specification Update par Matthew le 01-31-2012, 10:14

- TFS Integration Tools – Installation par Vivien Fabing le 01-31-2012, 00:06