2017-03-15 30 views
0

我假設有一種方法可以告訴WPF如何將字符串目標轉換爲源類型而無需指定IValueConverter。例如,WPF會將字符串轉換爲顏色。我想如果我的類型支持從字符串到我的類型的顯式轉換,這就足夠了。但是這不起作用。有沒有辦法?如何告訴WPF無需IValueConverter將目標轉換爲我的源類型

+0

你可以註冊一個[類型轉換器(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

謝謝你的回答。我想讓我的類型被XAML程序員使用,而不必創建IValueConverter。這工作完美。謝謝。 – user3905162

相關問題