Использование перечисления в 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. Но это уродливо и подвержено ошибкам обслуживания (каждый раз, когда изменяется перечисление - метод конвертера должен меняться).
Есть ли лучший способ передать не тривиальный объект в качестве параметра?
Ответы
Ответ 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)
для анализа строки в качестве счетчика