46

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

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

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

public AuthenticationEnum CurrentAuthenticationLevel { get; set; }

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

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

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

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

4

2 回答 2

99

ArsenMkrt 的回答是正确的,

另一种方法是x:Static使用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;
        //...
    }
}
于 2011-02-09T08:47:42.023 回答
8

用户

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

将字符串解析为枚举数

于 2011-02-09T08:01:00.267 回答