我怎么做卡尔伯恩.请使用我的多参数构造函数

本文关键字:我的 请使用 参数 构造函数 | 更新日期: 2023-09-27 18:01:48

当我有一个带有ImportingConstructor(接受一个参数)的View Model设置时,将调用构造函数并正确显示屏幕。例子:

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

然而,基于Caliburn的例子。微,似乎我应该能够提供一个不同的构造函数与N个参数。例子:

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

但是这个版本的构造函数在我的沙盒中从未被调用过。我已经编译和运行的样本代码从Caliburn。Micro就是这样做的;调用多参数构造函数。(见这份原稿。微样例项目"HelloEventAggregator")

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

我需要做什么才能得到Caliburn。微调用我的多参数构造函数,并显示正确的视图?

我怎么做卡尔伯恩.请使用我的多参数构造函数

问题出现了,因为我有多个视图模型集

[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);
        ...
    }
    ...
}