我想使用ExpandoObject作爲PropertyGrid的SelectedObject。我知道如何我想要的屬性添加到ExpandoObject:是否可以向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()
的返回值設置爲其SelectedObject
屬性時,PropertyGrid中沒有顯示生成的屬性。我假設(這可能是錯誤的),這是因爲ExpandoObject
的屬性沒有任何DisplayNameAttribute
,DescriptionAttribute
或用於控制屬性在PropertyGrid
中的顯示方式的任何其他屬性。
我已經做了一些閱讀和一些谷歌搜索,我不知道是否有一種方法來裝飾自定義屬性ExpandoObject
生成的屬性。有沒有人知道如何做到這一點,或者更好的方式在PropertyGrid
中顯示ExpandoObject
?
SOLUTION:
由@Stephen克利裏提供的答案是正確的和有幫助的(感謝,斯蒂芬)。對於有同樣問題的其他人,實施ICustomTypeDescriptor
對我來說非常合適。
作爲一個側面說明,實現ICustomTypeDescriptor
的對象提供了屬性和事件描述符本身,而不是另一個對象。我認爲描述符和描述應該首先通過一個屬性或某種東西相關聯 - 對於我來說,一個對象應該描述它自己的類型似乎令人困惑和多餘,但這確實是如何使用ICustomTypeDescriptor
接口的。