【问题标题】:Dynamic enum converter动态枚举转换器
【发布时间】:2012-11-02 03:44:26
【问题描述】:

我想为我的应用程序中所有可能的枚举创建一个动态 2 路转换器。

我不想为每个枚举创建一个转换器,我想创建一个转换器,它提供从枚举到字节以及从字节到枚举反之亦然的转换。

我怎样才能到达那里?我的方法已经是 2-way 但需要在代码中进行静态转换 (MyEnum)

public class MyEnumConverter : MarkupExtension, IValueConverter 
        {
        public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture) {
            return (MyEnum)value;
        }

        public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture) {
            return (byte)value;
        }

        public override object ProvideValue(System.IServiceProvider serviceProvider) {
            return this;
        }
    }

【问题讨论】:

  • 你混合了字节和整数。你能发布你是如何绑定到枚举的吗?

标签: c# wpf markup-extensions


【解决方案1】:

我相信你可以通过两种不同的方式做到这一点。

选项 1:利用转换方法上的 targetType 参数。当需要转换为枚举时,那么targetType就是枚举类型。您可以使用System.Enum 类上的静态方法之一进行转换。

选项 2:在您的 xaml 中,使用 ConverterParameter 传入您要转换为的枚举类型:

Converter={local:MyConverter, ConverterParameter={x:Type MyEnumType}}

如果你走那条路,那么类型将在转换方法的parameter 参数中。同样,System.Enum 类上的静态方法将为您完成繁重的工作。

【讨论】:

    【解决方案2】:

    尝试这些扩展方法,它将从 enum 转换为 datatype(int, byte,..) 并从 datatype(int, byte,..) 转换为 enum,反之亦然..

        public static T ToEnumValue<T, E>(this E enumType)
        {
            return (T)Enum.ToObject(typeof(E), enumType);
        }
    
        public static E ToEnumType<T, E>(this T enumString)
        {
            return (E)Enum.Parse(typeof(E), enumString.ToString());
        }
    

    例如:要使用上述方法,请使用枚举

    public enum EmployeeType
    {
        Permanent = 0,
        Contract = 1,
    }
    
    int value = EmployeeType.Contract.ToEnumValue<int, EmployeeType>(); // 1
    EmployeeType employeeType = value.ToEnumType<int, EmployeeType>();  // Contract
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2020-08-21
      • 2021-01-04
      • 2023-02-21
      相关资源
      最近更新 更多