【问题标题】:Using enum in ConverterParameter在 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 更改 - 转换器方法也需要更改)。

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

【问题讨论】:

标签: c# .net wpf data-binding converters


【解决方案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)

将字符串解析为枚举数

【讨论】:

  • 直接使用枚举值比每次都解析字符串性能好?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 2023-04-04
  • 2012-03-20
相关资源
最近更新 更多