当我使用带有单个参数的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调用我的多参数构造函数,并显示正确的视图?
答案 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);
...
}
...
}