Question

La classe DateTimeConverter fournit des conversions entre DateTime et string. Je souhaite également prendre en charge les conversions entre DateTime et double.

Selon MSDN, je peux étendre la classe DateTimeConverter à cette fin - voir MSDN DateTimeConverter

J'ai créé une classe qui hérite de DateTimeConverter et fournit les substitutions appropriées pour CanConvertTo, CanConvertFrom, etc.

Comment puis-je m'assurer que le cadre utilise mon convertisseur DateTime (DateTimeConverterEx) au lieu de celui fourni dans le BCL (DateTimeConverter) lorsque le code ci-dessous est appelé?

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

Merci.

Était-ce utile?

La solution

Vous devez affecter le convertisseur. Propriété par propriété, vous pouvez utiliser:

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

Ceci fonctionnerait alors pour l'utilisation du formulaire:

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

Cela fonctionnera pour les scénarios de liaison les plus courants.

( modifier )

Pour définir le convertisseur pour tout DateTime :

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

Votre exemple de code devrait maintenant fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top