在ConverterParameter中使用枚举

Leo*_*nid 36 .net c# data-binding wpf converter

我正在构建一个可供许多用户使用的应用程序.每个用户都被分类为下一个身份验证级别之一:

public enum AuthenticationEnum
{
    User,
    Technitian,     
    Administrator,
    Developer
}
Run Code Online (Sandbox Code Playgroud)

某些控件(如按钮)仅向某些级别的用户公开.我有一个属性,其中包含当前用户的身份验证级别:

public AuthenticationEnum CurrentAuthenticationLevel { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想将此属性绑定到某些控件的"Visibilty"属性,并将参数传递给Converter方法,告诉它什么是能够查看控件的最低身份验证级别.例如:

<Button Visibility="{Binding Path=CurrentAuthenticationLevel, Converter={StaticResource AuthenticationToVisibility}, ConverterParameter="Administrator"}"/>
Run Code Online (Sandbox Code Playgroud)

意味着只有"管理员"和"开发人员"才能看到该按钮.不幸的是,上面的代码将"Administrator"作为字符串传递.当然,我可以在转换器方法中使用Switch-Case并将字符串转换为AuthenticationEnum.但这很难看并且容易出现维护错误(每次枚举更改时 - 转换器方法都应该更改).

有没有更好的方法来传递非平凡的对象作为参数?

Fre*_*lad 81

ArsenMkrt的回答是正确的,

另一种方法是使用x:Static语法 ConverterParameter

<Button ...
        Visibility="{Binding Path=CurrentAuthenticationLevel,
            Converter={StaticResource AuthenticationToVisibility},
            ConverterParameter={x:Static local:AuthenticationEnum.Administrator}}"/>
Run Code Online (Sandbox Code Playgroud)

并在转换器

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

  • 我们如何在Windows应用商店应用中执行此操作?看起来像x:静态是这个项目类型无法识别的. (5认同)

Ars*_*yan 6

用户

 (AuthenticationEnum)Enum.Parse(typeof(AuthenticationEnum),parameter)
Run Code Online (Sandbox Code Playgroud)

将字符串解析为枚举器

  • 直接使用枚举值比每次解析字符串有更好的性能吗? (2认同)