如何让Calburn.Micro使用我的多参数构造函数?

时间:2011-07-12 17:45:52

标签: c# .net silverlight silverlight-4.0 caliburn.micro

当我使用带有单个参数的ImportingConstructor进行View Model设置时,将调用构造函数并正确显示屏幕。例如:

    [ImportingConstructor]
    public ShellViewModel(IEventAggregator events)
    {
        events.Subscribe(this);
    }

但是,基于Caliburn.Micro的示例,似乎我应该能够提供具有N个参数的不同构造函数。例如:

    [ImportingConstructor]
    public ShellViewModel(LeftViewModel left, RightViewModel right, IEventAggregator events)
    {
        Left = left;
        Right = right;

        events.Subscribe(this);
    }

但是这个版本的构造函数从未在我的沙箱中调用过。我已经编译并运行了Caliburn.Micro中的示例代码,它可以执行此操作;调用多参数构造函数。 (参见Caliburn.Micro示例项目“HelloEventAggregator”)

确实 - 当我运行我的沙箱代码(第二个版本)时,不会调用构造函数,而是选择不同的ViewModel作为初始显示。但是在HelloEventAggregator示例中,他们首先构造并显示了它们的shellview模型。

我需要做些什么才能让Caliburn.Micro调用我的多参数构造函数,并显示正确的视图?

1 个答案:

答案 0 :(得分:1)

问题出现了,因为我有多个使用

设置的视图模型
[Export(typeof(IShell))]

导出类型应该是您的[ImportingConstructor]所期望的任何内容,以便满足该合同。

示例 - ShellViewModel

[Export(typeof(IShell))]
public class ShellViewModel : PropertyChangedBase, IShell
{
    [ImportingConstructor]
    public ShellViewModel(LeftViewModel leftModel)
    {
        ...
    }
    ...
}

示例 - LeftViewModel

[Export(typeof(LeftViewModel))]
public class LeftViewModel : PropertyChangedBase, IShell
{
    [ImportingConstructor]
    public LeftViewModel(IEventAggregator events)
    {
        events.Subscribe(this);
        ...
    }
    ...
}