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

Nas*_*adi 2 c# generics wpf xaml binding

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

[ValueConversion(typeof(T), typeof(string))]
class DataTypeConverter<T> : IValueConverter
Run Code Online (Sandbox Code Playgroud)

将 int、double、byte、ushort 等数据类型转换为字符串,反之亦然,并在我的类的不同属性类型的两种绑定中使用它,然后通过这行代码简单地创建任何类型:

class ushortTypeConverter : DataTypeConverter<ushort>{}
Run Code Online (Sandbox Code Playgroud)

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

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

akt*_*ton 5

不幸的是,您不能使用泛型属性(typeof(T)[ValueConversion(typeof(T), typeof(string))]。请参阅为什么 C# 禁止泛型属性类型?了解更多信息。换言之,这是一种编译器简化,以避免被认为是罕见的边缘情况。

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

否则,有很多 IValueConverters 可以完成您需要的全部或部分任务。看: