winforms - winform PropertyGrid可以编辑动态对象吗?

标签 winforms propertygrid dynamicobject

众所周知,默认情况下 winform PropertyGrid 能够编辑预定义类的属性。然而,有时我们可能需要编辑动态创建的对象。引用下面的代码:

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

ParamForm 窗口包含 2 个控件:PropertyGrid 和 Button。它被设计为能够编辑仅包含字符串或 bool 字段的动态对象。

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

最佳答案

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

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

关于winforms - winform PropertyGrid可以编辑动态对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31446787/

相关文章:

c# - 将动态对象解析委托(delegate)给其他实例

vb.net - 设置数据源后无法访问 DataGridView 列

c# - InvalidCastException 将对象转换为它自己的类型

c# - 在设计器中删除 GenerateMember 和 Modifiers 属性

wpf - ICustomTypeProvider 或 DynamicObject

c# - MVVM DynamicObject + Entity Framework STE 实体 + 属性更改行为

.net - 在 Visual Studio 中调试时如何更改工作目录?

c# - ActiveX 控件在 IE 以外的单独窗口中运行

c# - 使用 Control+Plus 的快捷方式创建 MenuItem – 使用反射修改 MenuItem 的私有(private)字段是最好的方法吗?

C# 属性 : Font and Color Change on the Fly