2017-03-15 29 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

相关问题