在 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 传递