Расширить TypeConverter - PullRequest
       9

Расширить TypeConverter

3 голосов
/ 19 января 2009

Класс 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));

Спасибо.

1 Ответ

11 голосов
/ 19 января 2009

Вам нужно выделить конвертер. По каждому объекту вы можете использовать:

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

Это будет работать для использования формы:

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

Это будет работать для большинства распространенных сценариев связывания.

( 1010 * редактировать *)

Чтобы установить конвертер для любой DateTime:

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

Теперь ваш пример кода должен работать.

...