我有一个名为Widget的父类。我有一个我存储的小部件列表。在此列表中,我存储了Widget的子项,如Button,Label,DropDown等。在我的编辑器中选择子项时,我将该对象(通过Widgets列表中的名称查找)分配给PropertyGrid。但是,因为它们存储为类型Widget,所以PropertyGrd仅显示Widget属性。 当我将其设置为PropertyGrid时,我想将子Widget转换为它的实际类型,以便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
}
答案 0 :(得分:3)
我假设你有这样的代码:
myPropertyGrid.SelectedObject = widget;
由于SelectedObject
属性属于object
类型,因此无论您是为其分配一个静态称为object
,Widget
的对象,还是Button
:它将被视为object
。由于其他原因,您的孩子的财产没有出现。