在 ConverterParameter 中使用枚举

Posted

技术标签:

【中文标题】在 ConverterParameter 中使用枚举【英文标题】:Using enum in ConverterParameter 【发布时间】:2011-06-23 23:19:23 【问题描述】:

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

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。但这很丑陋并且容易出现维护错误(每次enum 更改 - 转换器方法也需要更改)。

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

【问题讨论】:

请把 Fredrik 的回答设为已回答。 查看其他格式和更多详细信息 - ***.com/questions/359699/… 【参考方案1】:

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

【讨论】:

我们如何在 Windows 应用商店应用中做到这一点?似乎 x:Static 无法被此项目类型识别。【参考方案2】:

用户

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

将字符串解析为枚举数

【讨论】:

直接使用枚举值比每次都解析字符串性能好?

以上是关于在 ConverterParameter 中使用枚举的主要内容,如果未能解决你的问题,请参考以下文章

如何将 GridView 作为 ConverterParameter 传递

如何将整数作为 ConverterParameter 传递?

绑定到转换器参数

x:UWP XAML 中的静态

x:UWP XAML 中的静态

八枚硬币 有一个是假的 用一个天平秤两次找出那个假的 怎么做