Caliburn微导航与IoC

本文关键字:IoC 导航 Caliburn | 更新日期: 2023-09-27 18:17:00

如果我有一个视图模型,如:

public interface IMainMenuViewModel
{
    bool CanDoAction1 { get; }
    void DoAction1();
}
public class MainMenuViewModel : Conductor<IScreen> , IMainMenuViewModel
{
    public bool CanDoAction1
    {
        get { return true; }
    }
    public void DoAction1()
    {
        //perform action
    }
}

如何将它注入父视图模型?IMainMenuViewModel接口没有指定任何导体属性,所以我不能在isscreen的位置使用它,这失败了:

public class ShellViewModel : Conductor<IScreen>.Collection.OneActive, IShellViewModel
{
    public ShellViewModel(IMainMenuViewModel mainMenuViewModel)
    {
        ActivateItem(mainMenuViewModel); //mainMenuViewModel is not an IScreen
    }
}

是正确的事情做继承IScreen在我的视图模型接口?即:

public interface IMainMenuViewModel : IScreen
{
    bool CanDoAction1 { get; }
    void DoAction1();
}

Caliburn微导航与IoC

首先我建议阅读http://blog.ploeh.dk/2011/03/03/InjectionConstructorsshouldbesimple/注入构造函数应该只接收依赖项。你应该在OnInitialize或OnActivate方法中激活MainMenuViewModel。当然你也可以在ViewModel中继承IScreen