2012-11-13 157 views
0

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

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

我该如何到达那里?我的做法已经是2路,但需要在代码静态浇铸(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; 
     } 
    } 
+0

您混合字节和整数。你能发布你如何约束Enum? – Paparazzi

回答

1

我相信你能做到这2种不同的方式秒。

选项1:利用convert方法中的targetType参数。当您需要转换为枚举时,则targetType是枚举类型。您可以使用System.Enum类中的静态方法之一来执行转换。

选项2:在您的XAML,使用ConverterParameter你要转换为枚举类型来传递:如果你走这条路

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

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

1

尝试这些扩展方法,它会从枚举转换为数据类型(INT,字节,..)和数据类型(INT,字节,..)来枚举反之亦然..

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