【发布时间】:2013-11-02 13:37:59
【问题描述】:
我有一个名为 Widget 的父类。我有一个我存储的小部件列表。在此列表中,我存储 Widget 的子项,例如 Button、Label、DropDown 等。当在我的编辑器中选择一个子项时,我将该对象(在 Widgets 列表中按名称查找)分配给 PropertyGrid。但是,由于它们存储为 Widget 类型,因此 PropertyGrd 仅显示 Widget 属性。 当我将子小部件设置为 PropertyGrid 时,我想将其转换为它的实际类型,以便 PropertyGrid 可以看到孩子的属性,但我想动态执行此操作而不是使用 if/case 语句,因为子小部件使用插件系统,所以我在设计时不知道类型是什么。我知道我必须使用反射,我很好,但我只是不知道该怎么做。
由于我将我的子小部件存储在父小部件的容器中,因此子小部件将被存储为小部件,不是吗?意味着 PropertyGrid 只能看到 Widget 属性?
Dictionary<string, Widget> Widgets;
Widgets.Add("button1", new Button()); // gets converted to parent Widget
PropGrid.SelectedObject = Widgets["button1"];
public class Button : Widget.Widget
{
public String Test { get; set; } // this doesn't show up in the property grid
}
【问题讨论】:
-
请提供一些代码。
-
您能否展示一个未显示的示例属性?如果您的代码与蒂姆的答案中显示的一样,它应该已经可以工作了——所以一个例子会有所帮助。另外:这是winforms吗?吗?还是……?
-
@MarcGravell
PropertyGrid是一个 winforms 类。我已经添加了那个标签。 -
@Tim 还有 wpf 实现,iirc(第 3 方) - 我假设 winforms,但想确定