当我第二次导航到ViewModel时,为什么没有调用Init()方法?

时间:2016-06-10 10:52:16

标签: c# windows-8.1 mvvmcross

我使用MvvmCross 3.5.1开发Win 8.1应用程序。用户按顺序浏览一些视图并返回到最后一个视图的第一个视图。在工作流程的第一次迭代中,一切都很完美。但是当用户再次启动工作流时 - 视图模型中的Init()方法不会被调用。

例如,FirstViewModel和SecondViewModel之间的交互如下所示。

FirstViewModel:

var prove = {
                [color]: {
                    current: 0,
                    polygonOptions: {
                        fillColor: color,
                        fillOpacity: 0.7,
                        strokeColor: '#2143AA',
                        strokeWeight: 2,
                        suppressUndo: true
                    }
                }};

SecondViewModel:

ShowViewModel<SecondViewModel>(
    new
    {
        code = ItemCode,
        descr = ItemDescription
    });

如此简单但只能工作一次:(

可能有什么理由导致这种行为?

作为解决方法,我尝试加载viewmodel&#34;手动&#34;:

public void Init(string code, string descr)
{
    ...
}

它解决了Init()方法调用的问题。但我不知道如何使用 m 变量显示视图模型。有人知道吗?

为我可怜的英语道歉并提前致谢!

1 个答案:

答案 0 :(得分:1)

Init()只被调用一次,因为Windows 8.1应用程序会缓存页面。因此,该页面的ViewModel不会被破坏,因此不会再次调用Init()方法。

您可以通过覆盖OnNavigatedTo来创建自己的BasePage来覆盖此行为:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.NavigationMode == NavigationMode.New)
        ViewModel = null;

    base.OnNavigatedTo(e);
}