0

我想为我的应用程序中的所有可能的枚举创建一个动态的 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;
        }
    }
4

2 回答 2

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
于 2012-11-13T17:21:12.057 回答
1

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

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

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

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

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

于 2012-11-13T17:46:12.173 回答