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/

相关文章:

.net - 在 Windows 窗体中添加和删除控件和内存使用

c# - 属性网格中属性 "Name"的特殊含义

Windows 10 Creators Update 更改 PropertyGrid 控件的样式

C#动态如何获取值

c# - Visual Studio 设计器 View 无法获得正确的形式

c# - .NET PropertyGrid 中的多个类别对于属性不可见

c# - wpf 属性网格

c# - 如何使用动态构建的 lambda 表达式搜索动态对象 IEnumerable<dynamic>?

c# - IronPython 调用 TryGetMember 而不是 TryInvokeMember

c# - 比较数据 GridView 的行并删除重复的行