Подтвердить что ты не робот

Использование перечисления в ConverterParameter

Я создаю приложение, которое может использоваться многими пользователями. Каждый пользователь классифицируется на один из следующих уровней аутентификации:

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

Некоторые элементы управления (например, кнопки) отображаются только на определенных уровнях пользователей. У меня есть свойство, которое содержит уровень аутентификации текущего пользователя:

public AuthenticationEnum CurrentAuthenticationLevel { get; set; }

Я хочу привязать это свойство к свойству "Visibilty" некоторых элементов управления и передать параметр методу конвертера, указав ему, что является самым низким уровнем проверки подлинности, который способен видеть элемент управления. Например:

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

означает, что только кнопка "Администратор" и "Разработчик" могут видеть кнопку. К сожалению, приведенный выше код передает "Администратор" в виде строки. Конечно, я могу использовать Switch-Case внутри метода конвертера и преобразовать строку в AuthenticationEnum. Но это уродливо и подвержено ошибкам обслуживания (каждый раз, когда изменяется перечисление - метод конвертера должен меняться).

Есть ли лучший способ передать не тривиальный объект в качестве параметра?

4b9b3361

Ответ 1

Ответ ArsenMkrt правильный,

Другой способ сделать это - использовать синтаксис x: Static в ConverterParameter

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

А в конвертере

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

Ответ 2

Пользователь

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

для анализа строки в качестве счетчика