2017-03-15 5 views
0

IValueConverterを指定せずに文字列ターゲットをソースタイプに変換する方法をWPFに伝える方法があると仮定します。 WPFは文字列を色に変換します。私のタイプが文字列から私のタイプへの明示的な変換をサポートしていれば、これで十分だろうと思いました。しかし、これはうまくいかなかった。方法はありますか?IValueConverterを使わずにターゲットをソースタイプに変換する方法を教えてください

+0

あなたは[にTypeConverter](https://msdn.microsoft.com/en-us/library/systemを登録することができ.componentmodel.typeconverter(v = vs.110).aspx)。 – Clemens

答えて

1

はい、あなたのタイプにタイプコンバータを定義する必要があります。 ToString()をオーバーライドするだけで、型から文字列に変換できます。他の方向に進むにはタイプコンバータが必要です。たとえば...

public class PartNumberConverter : TypeConverter 
{ 
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) 
    { 
     return sourceType == typeof(string); 
    } 
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) 
    { 
     if(value is string) 
     { 
      return new PartNumber(value as string); 
     } 
     return null; 
    } 
} 
[TypeConverter(typeof(PartNumberConverter))] 
public class PartNumber 
{ 
    public PartNumber(string s) 
    { 
     string[] e = s.Split('-'); 
     if(e.Length==3) 
     { 
      _a = Convert.ToInt32(e[0]); 
      _b = Convert.ToInt32(e[1]); 
      _c = Convert.ToInt32(e[2]); 
     } 
    } 
    public PartNumber(int a, int b, int c) 
    { 
     _a = a; 
     _b = b; 
     _c = c; 
    } 
    int _a = 0; 
    int _b = 0; 
    int _c = 0; 
    public override string ToString() 
    { 
     return _a + "-" + _b + "-" + _c; 
    } 
} 

はそうではないIValueConverterそれでもコンバータ:)

+0

注:OPのためです。 'IValueConverter'はランタイムツールです。ここに挙げた 'TypeConverter'はデザインタイムツールです。あなたのオブジェクトに直接バインドする場合、 'IValueConverter'が正しいツールかもしれません。 XAMLで型のインスタンスを作成する場合は、 'TypeConverter'が正しいツールです。 –

+0

ありがとうございます。 IValueConverterを作成せずに、XAMLプログラマーが自分の型指定を使用したかったのです。これは完全に機能します。ありがとうございました。 – user3905162