我有一個名爲Widget的父類。我有一個我存儲的Widgets列表。在此列表中,我存儲Widget的子項,如Button,Label,DropDown等。在我的編輯器中選擇一個子項時,我將該對象(通過Widgets列表中的名稱查找)分配給PropertyGrid。但是,由於它們存儲爲Widget類型,因此PropertyGrd僅顯示Widget屬性。 當我將它設置爲PropertyGrid時,我想要將其子類Widget強制轉換爲實際類型,以便PropertyGrid可以看到該子類的屬性,但是我想動態地執行此操作,而不是使用if/case語句,因爲子部件使用插件系統在設計時我不知道類型是什麼。我知道我必須使用反射,我很好,但我只是不知道如何做到這一點。C#屬性網格的動態投射對象
由於我將子窗口小部件存儲在父窗口小部件的容器中,因此子窗口將作爲窗口小部件存儲?這意味着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
}
請提供一些代碼。 – ataravati
你可以顯示一個不顯示的示例屬性嗎?如果你的代碼如Tim的答案所示,它應該已經可以工作 - 所以一個例子會有所幫助。另外:這是winforms嗎? WPF?要麼...? –
@MarcGravell'PropertyGrid'是一個winforms類。我已經添加了該標籤。 –