0
我打算讓WPF UserControl儘可能通用。我已經定義了一個基類,所有的用戶控件都可以解決這個問題。我希望能夠通過爲UserControl或甚至基類指定類型參數來使其具有通用性,但這似乎不可能。如何創建類型存儲在Type變量中的類的實例?
由於周圍的工作,我嘗試設置一個類型作爲參數,如:
public class UCBase : UserControl
{
public virtual Type UCType { get; private set; }
public virtual Type PanelType { get; private set; }
internal void SetType<TVM, TPanel>() where TPanel : new()
{
UCType = typeof(TVM);
PanelType = typeof(TPanel);
}
}
後來,我需要UCType
表示創建一個實例類,特別是知道如何另一個用戶控制來處理ViewModel我要通過它。
public ZonesAccordionPanel(List<ViewModelBase> vmItems)
{
InitializeComponent();
foreach (var item in vmItems)
{
var exp = new Expander { Header = new ZoneReport(item) };
exp.Resources.Add("item", item);
exp.Expanded += exp_Expanded;
accordion.Children.Add(exp);
}
}
void exp_Expanded(object sender, RoutedEventArgs e)
{
var expander = (Expander) sender;
var currentItem = expander.Resources["item"];
// I have my data and I'd like to pass that to a specific UserControl
// that knows how to deal with that data the way I want
}
我怎樣才能使基於該類型參數我設置與SetType<TVM, TPanel>()
用戶控制?
是否可以創建一個類型爲public virtual Type PanelType { get; private set; }
的實例?
如果是這樣,怎麼樣?
你有沒有看着Activator.CreateInstance?如果你的'UCType'類型是通用的(換句話說,'UCType'),那麼你可以做'Activator.CreateInstance(UCType.MakeGenericType(new [] {PanelType}),)''。 –
SPFiredrake