Может ли winform PropertyGrid редактировать динамический объект?

Как мы знаем, по умолчанию PropertyGrid winform может редактировать свойства предопределенного класса. Однако иногда нам может понадобиться отредактировать динамически созданные объекты. Обратитесь к приведенному ниже коду:

ParamForm.Show(new { Firstname = "John", Lastname = "Herby" })

Окно ParamForm содержит 2 элемента управления: PropertyGrid и Button. Он предназначен для редактирования динамических объектов, содержащих только строковые или логические поля.

public static dynamic Show(dynamic args)
{
    var frm = new ParamForm(args);
    frm.ShowDialog();
    return frm.Result;
}
public ParamForm(dynamic args)
{
    InitializeComponent();
    propertyGrid.SelectedObject = ag;
}

Проблема заключается в том, что имя и фамилия, отображаемые в элементе управления PropertyGrid, отображаются серым цветом и не могут быть отредактированы. Так как же сделать так, чтобы PropertyGrid мог редактировать динамически созданные объекты?


person mind1n    schedule 16.07.2015    source источник


Ответы (1)


Анонимные типы имеют дескрипторы свойств только для чтения (используемые сеткой свойств) по дизайну (подробнее об этом см. здесь: Недоступная только для чтения альтернатива анонимным типам).

Однако вы можете использовать приемы, такие как класс DynamicTypeDescriptorWrapper, продемонстрированный здесь: Развлекайтесь с динамикой C# 4.0, реализующей интерфейс ICustomTypeDescriptor< /а>

person Simon Mourier    schedule 16.07.2015