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