Frage

Die Datetimeconverter-Klasse stellt Konvertierungen zwischen Datetime und String. Ich mag auch Konvertierungen zwischen Datetime unterstützen und zu verdoppeln.

Laut MSDN kann ich die Datetimeconverter-Klasse erweitern, dies zu tun - siehe MSDN Datetimeconverter

Ich habe eine Klasse erstellt, die von Datetimeconverter erbt und stellt die entsprechenden Überschreibungen für CanConvertTo, CanConvertFrom, etc.

Wie kann ich sicherstellen, dass der Rahmen meinen Datetime-Konverter verwendet (DateTimeConverterEx) statt dem in der BCL (Datetimeconverter) zur Verfügung gestellt, wenn der Code unten genannt wird?

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

Danke.

War es hilfreich?

Lösung

Sie müssen den Konverter zuzuordnen. Auf einem Grundstück-by-Eigenschaft Basis, können Sie:

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

Dies würde für die Verwendung des Formulars dann arbeiten:

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

Dies wird für die meisten gängigen Bindungsszenarien arbeiten.

( Bearbeiten )

Um den Konverter für gesetzt jede DateTime:

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

Jetzt ist Ihr Beispielcode sollte funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top