[英]Why Init() method is not called when I navigate to the ViewModel second time?
我使用MvvmCross 3.5.1開發Win 8.1應用程序。 用戶依次瀏覽一些視圖並從最后一個視圖返回到第一個視圖。 在工作流程的第一次迭代期間,一切工作都非常完美。 但是,當用戶再次啟動工作流程時,不會調用視圖模型中的Init()方法。
例如,FirstViewModel和SecondViewModel之間的交互如下所示。
FirstViewModel:
ShowViewModel<SecondViewModel>(
new
{
code = ItemCode,
descr = ItemDescription
});
SecondViewModel:
public void Init(string code, string descr)
{
...
}
如此簡單,但只能使用一次:(
什么原因可能導致這種行為?
解決方法中,我嘗試“手動”加載視圖模型:
var d = new Dictionary<string, string>
{
{"code", ItemCode},
{"descr", ItemDescription}
};
var b = new MvxBundle(d);
var r = new MvxViewModelRequest<SecondViewModel>(b, null, null);
var m = Mvx.Resolve<IMvxViewModelLoader>().LoadViewModel(r, null);
它通過Init()方法調用解決了該問題。 但是我不知道如何使用m變量顯示視圖模型。 有誰知道?
抱歉我的英語不好,謝謝!
Init()僅被調用一次,因為Windows 8.1應用程序緩存頁面。 因此,該頁面的ViewModel不會被銷毀,因此不會再次調用Init()方法。
您可以通過覆蓋OnNavigatedTo來創建自己的BasePage來覆蓋此行為:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.NavigationMode == NavigationMode.New)
ViewModel = null;
base.OnNavigatedTo(e);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.