在ConverterParameter中使用枚举

47

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

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

有些控件(如按钮)只对特定级别的用户开放。我有一个属性,用于保存当前用户的身份验证级别:

public AuthenticationEnum CurrentAuthenticationLevel { get; set; }

我想将这个属性绑定到某些控件的“可见性”属性,并向转换器方法传递一个参数,告诉它能够看到控件的最低身份验证级别是什么。

例如:

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

意思是只有“管理员”和“开发人员”可以看到按钮。不幸的是,上面的代码将“Administrator”作为字符串传递。当然,我可以在转换方法中使用switch/case并将字符串转换为AuthenticationEnum。但这很丑陋,并容易出现维护错误(每次枚举更改时 - 转换方法也需要更改)。

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


4
请将Fredrik的回答标记为已回答。 - mahboub_mo
请参考以下链接以获取其他格式和更多细节 - https://dev59.com/TnRC5IYBdhLWcg3wROpQ - akjoshi
2个回答

102

ArsenMkrt的回答是正确的,

另一种实现方式是在ConverterParameter中使用x:Static语法。

<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;
        //...
    }
}

5
在Windows Store应用程序中,我们该如何做?似乎x:Static在这种项目类型中无法识别。 - Teoman shipahi

8

用户

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

将字符串解析为枚举器


2
直接使用枚举值比每次解析字符串性能更好吗? - linquize

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接