我正在构建一个可供许多用户使用的应用程序。每个用户都被分类为下一个身份验证级别之一:
public enum AuthenticationEnum
{
User,
Technitian,
Administrator,
Developer
}
某些控件(如按钮)仅向某些级别的用户公开。 我有一个属性,其中包含当前用户的身份验证级别:
public AuthenticationEnum CurrentAuthenticationLevel { get; set; }
我想将此属性绑定到某些控件的“Visibilty”属性,并将参数传递给Converter方法,告诉它能够查看控件的最低身份验证级别是什么。 例如:
<Button Visibility="{Binding Path=CurrentAuthenticationLevel, Converter={StaticResource AuthenticationToVisibility}, ConverterParameter="Administrator"}"/>
表示只有“管理员”和“开发人员”才能看到该按钮。 不幸的是,上面的代码将“Administrator”作为字符串传递。当然,我可以在转换器方法中使用Switch-Case并将字符串转换为AuthenticationEnum。但这很难看并且容易出现维护错误(每次枚举变化时 - 转换器方法都应该改变)。
有没有更好的方法可以将不重要的对象作为参数传递?
答案 0 :(得分:78)
ArsenMkrt的回答是正确的,
另一种方法是在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;
//...
}
}
答案 1 :(得分:6)
用户
(AuthenticationEnum)Enum.Parse(typeof(AuthenticationEnum),parameter)
将字符串解析为枚举器