문제
DateTimeConverter 클래스는 DateTime과 String 간의 전환을 제공합니다. 또한 DateTime과 Double 간의 전환을 지원하고 싶습니다.
MSDN에 따르면이 작업을 수행하려면 DateTimeConverter 클래스를 확장 할 수 있습니다. MSDN DATETIMECONVERTER
DateTimeConverter에서 상속되는 클래스를 만들었고 Canconvertto, Canconvertfrom 등에 적절한 재정의를 제공합니다.
아래 코드가 호출 될 때 Framework가 BCL (DateMeconVerter) 대신 DateTime Converter (DateTimeConverex)를 사용하는지 확인하려면 어떻게해야합니까?
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"
이것은 가장 일반적인 바인딩 시나리오에서 작동합니다.
(편집하다)
변환기를 설정합니다 어느 DateTime
:
TypeDescriptor.AddAttributes(typeof(DateTime),
new TypeConverterAttribute(typeof(DateTimeConverterEx)));
이제 샘플 코드가 작동합니다.
제휴하지 않습니다 StackOverflow