3

我正在尝试使用以下内容创建自定义用户控件:

var panel = new GenericAccordionPanel<ZoneReport, ZonesPanel, ZonesVM>(myVm.ZonesVm);

GenericAccordionPanel定义为:

public class GenericAccordionPanel<THeader, TBody, TViewModel> : UserControl
{
    public Accordion Accordion { get; set; }

    public GenericAccordionPanel(TViewModel vmItem)
    {
        this.Accordion = new Accordion();

        //the constructor for ZoneReport(THeader) takes a ZonesVM (vmItem) as a parameter.
        var zr = (THeader)Activator.CreateInstance(typeof(THeader), new { vmItem });

        var exp = new Expander { Header = zr };

        Accordion.Children.Add(exp);

        base.Content = Accordion;
    }
}

问题在于Activator.CreateInstance以下情况失败MissingMethodException

未找到类型“[命名空间].Zones.ZoneReport”的构造函数。

我怎样才能创建一个实例ZoneReport

4

1 回答 1

9

new { vmItem }应该是new object[]{ vmItem }

目前,您使用Activator.CreateInstance匿名类型作为第二个参数调用,而不是参数数组。

由于第二个参数(对于您想要的重载)实际上是一个params参数,您也可以只使用 plainvmItem编译器将生成数组:

 var zr = (THeader)Activator.CreateInstance(typeof(THeader), vmItem);
于 2012-05-29T09:07:45.057 回答