Я пытаюсь использовать ExpandoObject в качестве SelectedObject PropertyGrid.Я знаю, как добавить нужные свойства в 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
, как и ожидалось.
Однако ни одно из сгенерированных свойств не отображается в PropertyGrid, когда я устанавливаю возвращаемое значение MakePropertyObject()
для его свойства SelectedObject
.Я предполагаю (возможно, ошибочно), что это потому, что свойства ExpandoObject
не имеют никаких DisplayNameAttribute
, DescriptionAttribute
или каких-либо других атрибутов, используемых для управления отображением свойств в PropertyGrid
.
Я немного почитал и немного погуглил, и я не могу понять, есть ли способ украсить сгенерированные свойства ExpandoObject
с помощью пользовательских атрибутов.Кто-нибудь знает, как это можно сделать, или как лучше показать ExpandoObject
в PropertyGrid
?
РЕШЕНИЕ:
Ответ, предоставленный@ Стефан Клири был верным и полезным (спасибо, Стивен).Для других с такой же проблемой, реализация ICustomTypeDescriptor
отлично работала для меня.
В качестве примечания: объект, который реализует ICustomTypeDescriptor
, предоставляет дескрипторы свойств и событий для себя, а недля другого объекта .Сначала я думал, что дескриптор и описанное должны быть связаны атрибутом или чем-то еще - мне показалось странным и излишним, что объект должен описывать свой собственный тип, но именно так PropertyGrid
использует интерфейс ICustomTypeDescriptor
.