web-dev-qa-db-fra.com

Utilisation d'énumération dans ConverterParameter

Je crée une application qui peut être utilisée par de nombreux utilisateurs. Chaque utilisateur est classé dans l'un des niveaux d'authentification suivants:

public enum AuthenticationEnum
{
    User,
    Technitian,     
    Administrator,
    Developer
}

Certains contrôles (tels que les boutons) ne sont exposés qu'à certains niveaux d'utilisateurs. J'ai une propriété qui détient le niveau d'authentification de l'utilisateur actuel:

public AuthenticationEnum CurrentAuthenticationLevel { get; set; }

Je veux lier cette propriété à la propriété "Visibilty" de certains contrôles et passer un paramètre à la méthode Converter, lui indiquant quel est le niveau d'authentification le plus bas capable de voir le contrôle. Par exemple:

<Button Visibility="{Binding Path=CurrentAuthenticationLevel, Converter={StaticResource AuthenticationToVisibility}, ConverterParameter="Administrator"}"/>

signifie que seuls "Administrateur" et "Développeur" peuvent voir le bouton. Malheureusement, le code ci-dessus passe "Administrateur" sous forme de chaîne. Bien sûr, je peux utiliser Switch-Case dans la méthode du convertisseur et convertir la chaîne en AuthenticationEnum. Mais c'est moche et sujet à des erreurs de maintenance (à chaque fois que l'énum change - la méthode du convertisseur doit changer).

Existe-t-il une meilleure façon de passer un objet non trivial comme paramètre?

39
Leonid

La réponse d'ArsenMkrt est correcte,

Une autre façon de procéder consiste à utiliser la syntaxe x: Static dans le ConverterParameter

<Button ...
        Visibility="{Binding Path=CurrentAuthenticationLevel,
            Converter={StaticResource AuthenticationToVisibility},
            ConverterParameter={x:Static local:AuthenticationEnum.Administrator}}"/>

Et dans le convertisseur

public class AuthenticationToVisibility : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        AuthenticationEnum authenticationEnum = (AuthenticationEnum)parameter;
        //...
    }
}
84
Fredrik Hedblad

Utilisateur

 (AuthenticationEnum)Enum.Parse(typeof(AuthenticationEnum),parameter)

pour analyser la chaîne en tant qu'énumérateur

7
Arsen Mkrtchyan