這與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? –