创建Generic IValueConverter以将数据类型转换为字符串

时间:2013-01-01 12:12:44

标签: c# wpf xaml generics binding

我想在我的WPF应用程序中创建一个通用数据类型转换器,就像这个类模板一样:

[ValueConversion(typeof(T), typeof(string))]
class DataTypeConverter<T> : IValueConverter

将数据类型(如int,double,byte,ushort)转换为字符串,反之亦然,并将其用于我的classess的不同属性类型的双向绑定,然后通过这一行代码创建任何类型:

class ushortTypeConverter : DataTypeConverter<ushort>{}

并且如果可能的话,在错误输入的情况下绑定的文本框中显示验证消息。

是否可以编写这样的类模板?

1 个答案:

答案 0 :(得分:4)

不幸的是,您无法在typeof(T)中使用通用属性[ValueConversion(typeof(T), typeof(string))]。有关详细信息,请参阅Why does C# forbid generic attribute types?。换句话说,这是一种编译器简化,以避免被认为是罕见的边缘情况

除此之外,我想不出这种方法不起作用的原因。但是,像System.ComponentModel.TypeConverter这样的类可以在没有泛型的情况下为您完成大部分转换。将它包装在一个简单的转换器中可能更容易。

否则,有很多IValueConverters可能会完成你需要的全部或部分内容。参见: