2012-05-25 61 views
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; }的實例?

如果是這樣,怎麼樣?

+0

你有沒有看着Activator.CreateInstance?如果你的'UCType'類型是通用的(換句話說,'UCType '),那麼你可以做'Activator.CreateInstance(UCType.MakeGenericType(new [] {PanelType}),)''。 – SPFiredrake

回答

相關問題