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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top