Erweitern einer Typeconverter
-
19-08-2019 - |
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.
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.