0

アプリケーションで可能なすべての列挙型に対して動的な双方向コンバーターを作成したいと考えています。

列挙型ごとにコンバーターを作成する必要はありません。列挙型からバイトへ、およびバイトから列挙型への変換を提供するコンバーターを 1 つ作成したいと考えています。

そこにどう行けますか?私のアプローチはすでに双方向ですが、コードに静的キャスト(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

これは2つの異なる方法で実行できると思います。

オプション 1: targetTypeconvert メソッドのパラメーターを利用します。列挙型に変換する必要がある場合targetTypeは、列挙型です。クラスの静的メソッドの 1 つを使用System.Enumして、変換を行うことができます。

オプション 2: xaml で、ConverterParameter を使用して、変換先の列挙型を渡します。

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

そのルートに進むと、型はparameterconvert メソッドのパラメーターになります。繰り返しになりますが、クラスの静的メソッドが面倒なSystem.Enum作業を行います。

于 2012-11-13T17:46:12.173 に答える
1

これらの拡張メソッドを試してみてください。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
于 2012-11-13T17:21:12.057 に答える