3

DateTimeConverter 类提供 DateTime 和字符串之间的转换。我还想支持 DateTime 和 double 之间的转换。

根据 MSDN,我可以扩展 DateTimeConverter 类来执行此操作 - 请参阅MSDN DateTimeConverter

我创建了一个继承自 DateTimeConverter 并为 CanConvertTo、CanConvertFrom 等提供适当覆盖的类。

当调用以下代码时,如何确保框架使用我的 DateTime 转换器 (DateTimeConverterEx) 而不是 BCL (DateTimeConverter) 中提供的转换器?

    DateTime dt = DateTime.Now;
    // This line returns a DateTimeConverter which I don't want. 
    // Would like to get a DateTimeConverterEx.
    TypeConverter tc = TypeDescriptor.GetConverter(dt);
    double dbl = (double)tc.ConvertTo(dt, typeof(double));

谢谢。

4

1 回答 1

12

您需要分配转换器。在逐个属性的基础上,您可以使用:

[TypeConverter(typeof(DateTimeConverterEx))]
public DateTime Foo {get {...} set {...}}

这将适用于表单的使用:

var prop = TypeDescriptor.GetProperties(obj)["Foo"];
var converter = prop.Converter;
// as before, using "converter"

这适用于最常见的绑定场景。

编辑

任何 DateTime设置转换器:

TypeDescriptor.AddAttributes(typeof(DateTime),
    new TypeConverterAttribute(typeof(DateTimeConverterEx)));

现在您的示例代码应该可以工作了。

于 2009-01-19T19:56:57.627 回答