2017-09-20 7 views
0

デフォルトのEnumConverterの代わりに常に使用されるenum型のカスタムEnumConverterを記述できますか?私はこの:-)にこれを行う方法を見つけ、私はこのコンバータ(可能な場合)を使用してどのようなコンバータを指定しなくても、私のXAMLコードでどこでも使用することが:-)デフォルトのEnumConverterの代わりに使用されるカスタムEnumConverterを記述することはできますか?

答えて

2

のために希望

すべてを翻訳しますこの型の列挙型を選択された文字列に変換します。

using System.ComponentModel; 

namespace WpfTestTypeConverter 
{ 
    [TypeConverter(typeof(DeviceTypeConverter))] 
    public enum DeviceType 
    { 
     Computer, 
     Car, 
     Bike, 
     Boat, 
     TV 
    } 
} 

そして私もこの作品EnumConverterクラスに基づいて

using System; 
using System.ComponentModel; 
using System.Globalization; 

namespace WpfTestTypeConverter 
{ 
    public class DeviceTypeConverter : EnumConverter 
    { 
     public DeviceTypeConverter(Type type) : base(type) 
     { 
     } 

     public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) 
     { 
      return (destinationType == typeof(string)); 
     } 

     public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) 
     { 
      if (value is DeviceType) 
      { 
       DeviceType x = (DeviceType)value; 

       switch (x) 
       { 
        case DeviceType.Computer: 
         return "This is a computer"; 
        case DeviceType.Car: 
         return "A big car"; 
        case DeviceType.Bike: 
         return "My red bike"; 
        case DeviceType.Boat: 
         return "Boat is a goat"; 
        case DeviceType.TV: 
         return "Television"; 
        default: 
         throw new NotImplementedException("{x} is not translated. Add it!!!"); 
       } 
      } 
      return base.ConvertFrom(context, culture, value); 
     } 
    } 
} 

をコンバータを書かなければならなかった:

まず私は私の列挙ににTypeConverter属性を追加する必要がありました。誰でもこのソリューションに関するコメントがありますか?

+0

データアノテーションを使用して、説明タグを列挙型に配置し、switch文をハードコードするのではなくタグを引き出す関数を使用できます。 –

関連する問題