如何创建一个类的实例,其类型存储在Type变量中?

时间:2012-05-25 13:58:24

标签: c# wpf

我正在努力使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; }中?

若然,怎么样?

1 个答案:

答案 0 :(得分:0)