2009-07-28 8 views
4

私は多くのプロパティを持つ基本クラスを持っています。これには、メタデータを含む拡張プロパティのリストが含まれます。これは、DisplayName、Description、Name、Type & PropertyGridに役立つ値プロパティを含むカスタムクラスのリストです。リストを変換する<MyClass>プロパティをPropertyGridと互換性のあるプロパティのエントリにC#

目的の最終結果は、上のリストの拡張プロパティとマージされた基本クラスのプロパティを示すPropertyGridになります。 PropertyGridでリストを単一のエントリとして表示するのではなく、各拡張プロパティをベースクラスプロパティとマージする必要があります。基本的にPropertyGridは、私の拡張プロパティのリストがオブジェクトのファーストクラスのプロパティだと考えています。

これは、リフレクションまたはダイナミックタイプ記述子を使用して可能ですか?

答えて

1

カスタムTypeConverterではかなりシンプルでなければなりません。このような

何か開始次のようになります。

public override bool GetPropertiesSupported(ITypeDescriptorContext context) 
{ 
    return true; 
} 

public override PropertyDescriptorCollection GetProperties(
    ITypeDescriptorContext context, object value, Attribute[] attributes) 
{ 
    return base.GetProperties(context, value, attributes). 
    Concat(TypeDescriptor.GetConverter(typeof(TheBaseType)). 
    GetProperties(context, value, attributes)); 
} 
+0

おかげleppie、あなたがコンテキストにこれをしてください置くことができます。つまり、これは自分のExtendedPropertyクラスまたはBaseクラスのカスタムタイプコンバータですか? また、ConcatはPropertyDescriptorCollection(ターゲットフレームワーク= 3.5)のインテリセンスではありません – dbez

+0

これは派生クラスに適用するタイプコンバータになります。 'Concat'は擬似関数です。あなたはそれを書いています:) – leppie

関連する問題