ExpandoObject を PropertyGrid の SelectedObject として使用しようとしています。必要なプロパティを ExpandoObject に追加する方法を知っています。
public dynamic MakePropertyObject()
{
dynamic expando = new ExpandoObject();
var dictionary = expando as IDictionary<string, object>;
foreach(MyClass m in PropertiesINeedToAdd)
dictionary[m.Name] = m.Value;
return expando;
}
このコードは正常に動作しています。デバッガーは、expando
のプロパティの名前と値を期待どおりに表示します。
MakePropertyObject()
ただし、戻り値をそのプロパティに設定すると、生成されたプロパティはどれも PropertyGrid に表示されませんSelectedObject
。これは、ExpandoObject
のプロパティDisplayNameAttribute
に 、DescriptionAttribute
、またはPropertyGrid
.
私はいくつかの読書とグーグルをしましたがExpandoObject
、カスタム属性で生成されたプロパティを装飾する方法があるかどうかわかりません。これを行う方法、または を に表示するより良い方法を知っている人はExpandoObject
いPropertyGrid
ますか?
解決:
@Stephen Cleary が提供した回答は正しく、役に立ちました (ありがとう、Stephen)。同じ問題を抱えている他の人にとって、実装ICustomTypeDescriptor
は私にとって完璧に機能しました。
補足として、実装するオブジェクトICustomTypeDescriptor
は、別のオブジェクトではなく、それ自体のプロパティとイベント記述子を提供します。最初は、記述子と記述されたものは属性または何かによってリンクされているはずだと思っていました-オブジェクトが独自のタイプを記述しなければならないことは混乱し、冗長に思えましたが、実際にはそれがインターフェイスPropertyGrid
の使用方法です。ICustomTypeDescriptor