这与我发布的另一个问题有关,但可能需要它自己。
我需要能够从其相关的 Android 视图中执行我的 ViewModel 中的命令,特别是在单击操作栏菜单项时。因此,首先我需要访问 ViewModel 的实例。
首先,我在ViewOnCreateOptionsMenu(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 框架必须已经在后台初始化的相同 ViewModel 实例(?):
public override void Initialize() {
CreatableTypes()
.EndingWith("NewJobViewModel")
.AsTypes()
.RegisterAsSingleton();
}
我显然误解了一些架构和后台发生的事情(所以如果这是一个基本问题,我很抱歉)但是有人可以告诉我我做错了什么吗?