C# 创建泛型IValueConverter以将数据类型转换为字符串

C# 创建泛型IValueConverter以将数据类型转换为字符串,c#,wpf,xaml,generics,binding,C#,Wpf,Xaml,Generics,Binding,我想在我的WPF应用程序中创建一个通用数据类型转换器,如以下类模板: [ValueConversion(typeof(T), typeof(string))] class DataTypeConverter<T> : IValueConverter [ValueConversion(typeof(T),typeof(string))] 类DataTypeConverter:IValueConverter 要将int、double、byte、ushort等数据类型转换为string

我想在我的WPF应用程序中创建一个通用数据类型转换器,如以下类模板:

[ValueConversion(typeof(T), typeof(string))]
class DataTypeConverter<T> : IValueConverter
[ValueConversion(typeof(T),typeof(string))]
类DataTypeConverter:IValueConverter
要将int、double、byte、ushort等数据类型转换为string,反之亦然,并在my classess的不同属性类型的双向绑定中使用它,然后只需通过这一行代码创建任何类型:

class ushortTypeConverter : DataTypeConverter<ushort>{}
类ushortTypeConverter:DataTypeConverter{}
如果可能,在文本框中显示验证消息,在输入错误的情况下,该消息将被绑定


有可能编写这样的类模板吗?

不幸的是,您不能在
[ValueConversion(typeof(T),typeof(string))]
中使用泛型属性(
typeof(T)
)。
请参阅以了解更多信息。为了解释,这是一种编译器简化,以避免被认为是罕见的边缘情况

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

否则,有很多iValueConverter可以完成您所需的全部或部分功能。请参阅:


属性中的typeof(T)是占位符(意思是将T更改为int、double等)还是泛型参数?很遗憾,您不能使用泛型属性。有关详细信息,请参阅。我想将其用作泛型参数,但是这行代码:[ValueConversion(typeof(T)、typeof(string))]是“”并且可以省略。感谢您的评论akton。没有泛型属性的问题的其他部分呢?可能吗?我看不到任何直接的问题。但是,正如我在回答中所展开的,我认为使用TypeConverter可能更容易。
Convert
方法实现可能与
return value.ToS一样简单tring();
但是
ConvertBack
方法更为复杂,因为泛型参数不能被分类或限制为使用类似
t.TryParse()
的东西。同意,但请查看我在回答中提到的System.Component.TypeConverter。它可以对许多类型通用地执行两个方向。