Расширить преобразователь типов
-
19-08-2019 - |
Вопрос
Класс 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)));
Теперь ваш пример кода должен сработать.