使用IoC进行Caliburn微导航

时间:2014-08-08 10:12:59

标签: c# navigation inversion-of-control caliburn.micro

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

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接口没有指定任何Conductor属性,所以我不能在IScreen的位置使用它,这会失败:

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();
}

1 个答案:

答案 0 :(得分:1)

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