Вопрос

Класс DateTimeConverter обеспечивает преобразования между DateTime и string.Я также хотел бы поддерживать преобразования между DateTime и double.

Согласно MSDN, я могу расширить класс DateTimeConverter для этого - см. MSDN DateTimeConverter Преобразователь даты и времени

Я создал класс, который наследуется от DateTimeConverter и предоставляет соответствующие переопределения для CanConvertTo, CanConvertFrom и т.д.

Как мне убедиться, что фреймворк использует мой конвертер даты и времени (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));

Спасибо.

Это было полезно?

Решение

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

[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)));

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top