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?
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;
//...
}
}
Utilisateur
(AuthenticationEnum)Enum.Parse(typeof(AuthenticationEnum),parameter)
pour analyser la chaîne en tant qu'énumérateur