Pergunta

A classe DateTimeConverter fornece conversões entre DateTime e string. Eu também gostaria de conversões de apoio entre DateTime e de casal.

De acordo com MSDN posso estender a classe DateTimeConverter para fazer isso - veja MSDN DateTimeConverter

Eu criei uma classe que herda de DateTimeConverter e fornece as substituições apropriadas para CanConvertTo, CanConvertFrom, etc.

Como posso ter certeza de que a estrutura usa meu conversor DateTime (DateTimeConverterEx) em vez do fornecido na BCL (DateTimeConverter) quando o código abaixo é chamado?

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

Graças.

Foi útil?

Solução

Você precisa alocar o conversor. Em uma base de propriedade por propriedade, você pode usar:

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

Este seria, então o trabalho para o uso da forma:

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

Isto irá funcionar para a maioria dos cenários de ligação comuns.

( Editar )

Para definir o conversor para qualquer DateTime:

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

Agora, o seu código de exemplo deve funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top