質問
DateTimeConverterクラスは、DateTimeと文字列間の変換を提供します。 DateTimeとdoubleの間の変換もサポートしたいと思います。
MSDNに従って、DateTimeConverterクラスを拡張してこれを行うことができます- MSDN DateTimeConverter
DateTimeConverterを継承し、CanConvertTo、CanConvertFromなどの適切なオーバーライドを提供するクラスを作成しました。
以下のコードが呼び出されたときに、フレームワークがBCL(DateTimeConverter)で提供されているものではなく、DateTimeコンバーター(DateTimeConverterEx)を使用していることを確認するにはどうすればよいですか?
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));
ありがとう。
解決
コンバータを割り当てる必要があります。プロパティごとに、次を使用できます。
[TypeConverter(typeof(DateTimeConverterEx))]
public DateTime Foo {get {...} set {...}}
これは、フォームの使用に対して機能します:
var prop = TypeDescriptor.GetProperties(obj)["Foo"];
var converter = prop.Converter;
// as before, using "converter"
これは、最も一般的なバインディングシナリオで機能します。
(編集)
any のコンバーターを設定するにはDateTime
:
TypeDescriptor.AddAttributes(typeof(DateTime),
new TypeConverterAttribute(typeof(DateTimeConverterEx)));
サンプルコードが機能するようになりました。
所属していません StackOverflow