簡體   English   中英

為什么第二次導航到ViewModel時未調用Init()方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM