Extender un convertidor de tipos
-
19-08-2019 - |
Pregunta
La clase DateTimeConverter proporciona conversiones entre DateTime y string. También me gustaría admitir conversiones entre DateTime y double.
Según MSDN, puedo extender la clase DateTimeConverter para hacer esto; consulte MSDN DateTimeConverter
He creado una clase que hereda de DateTimeConverter y proporciona las anulaciones apropiadas para CanConvertTo, CanConvertFrom, etc.
¿Cómo me aseguro de que el marco utiliza mi convertidor DateTime (DateTimeConverterEx) en lugar del que se proporciona en el BCL (DateTimeConverter) cuando se llama al siguiente código?
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));
Gracias.
Solución
Necesita asignar el convertidor. Propiedad por propiedad, puede usar:
[TypeConverter(typeof(DateTimeConverterEx))]
public DateTime Foo {get {...} set {...}}
Esto funcionaría para el uso del formulario:
var prop = TypeDescriptor.GetProperties(obj)["Foo"];
var converter = prop.Converter;
// as before, using "converter"
Esto funcionará para los escenarios de enlace más comunes.
( editar )
Para configurar el convertidor para cualquier DateTime
:
TypeDescriptor.AddAttributes(typeof(DateTime),
new TypeConverterAttribute(typeof(DateTimeConverterEx)));
Ahora su código de muestra debería funcionar.