这与another question I posted有关,但可能需要自行解决。MvvmCross - 无法解析ViewModel的类型
我需要能够在我的ViewModel中从其相关的Android视图执行一个命令,特别是当单击一个Action Bar菜单项时。因此,首先我需要访问ViewModel的实例。
首先我尝试下面的代码行中的视图的OnCreateOptionsMenu(IMenu menu)
方法:
NewJobViewModel newJobViewModel = Mvx.Resolve<NewJobViewModel>();
然而,这导致错误:"UNHANDLED EXCEPTION: Cirrious.CrossCore.Exceptions.MvxException: Failed to resolve type MyProject.Core.ViewModels.NewJobViewModel"
我然后试图这个代替:
[Activity]
public class NewJobView : MvxActivity {
private NewJobViewModel _newJobViewModel;
public NewJobViewModel NewJobViewModel {
get { return _newJobViewModel; }
set { _newJobViewModel = value; }
}
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
SetContentView(Resource.Layout.NewJobView);
this.NewJobViewModel = Mvx.Resolve<NewJobViewModel>();
}
}
哪个没有帮助。
然而,加入以下Apps.cs
治愈的错误,但导致其他的问题,因为它显然没有给我说MvvmCross框架必须在后台已经初始化视图模型的同一个实例(?):
public override void Initialize() {
CreatableTypes()
.EndingWith("NewJobViewModel")
.AsTypes()
.RegisterAsSingleton();
}
我明显误解了一些架构和发生在后台的事情(所以我很抱歉如果这是一个基本问题),但有人可以告诉我我做错了什么吗?
感谢那个Stuart,它解决了我的问题,现在我已经设法将Action Bar的click事件连接到ViewModel中的命令。 PS:我发现你的N + 1视频系列是学习MvvmCross的绝佳方式。保持伟大的工作:-)格雷厄姆。 – Graham
但是,如何使用带有一些子视图模型的HomeViewModel的选项卡视图等场景,每个选项卡都有一个。你是否新增了每个子视图模型,并将所有依赖项传递给HomeViewModel?为什么不在HomeViewModel构造函数中使用Mvx.Resolve? –