是winform PropertyGrid能够编辑动态对象吗?

时间:2015-07-16 06:31:15

标签: winforms propertygrid dynamicobject

我们知道默认情况下,winform PropertyGrid能够编辑预定义类的属性。但是,有时我们可能需要编辑动态创建的对象。请参阅以下代码:

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能够编辑动态创建的对象?

1 个答案:

答案 0 :(得分:2)

匿名类型具有设计的只读属性描述符(由属性网格使用)(有关详细信息,请参见此处:Non-read only alternative to anonymous types)。

但是,您可以使用此处演示的DynamicTypeDescriptorWrapper类等技巧:Fun with C# 4.0’s dynamic来实现ICustomTypeDescriptor Interface