Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么第二次导航到ViewModel时不调用Init()方法?_C#_Windows 8.1_Mvvmcross - Fatal编程技术网

C# 为什么第二次导航到ViewModel时不调用Init()方法?

C# 为什么第二次导航到ViewModel时不调用Init()方法?,c#,windows-8.1,mvvmcross,C#,Windows 8.1,Mvvmcross,我使用MvvmCross 3.5.1开发Win 8.1应用程序。用户依次浏览一些视图并从最后一个视图返回第一个视图。在工作流的第一次迭代过程中,一切都非常完美。但是当用户再次启动工作流时,不会调用viewmodels中的Init()方法 例如,FirstViewModel和SecondViewModel之间的交互如下所示 FirstViewModel: ShowViewModel<SecondViewModel>( new { code = ItemC

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

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

FirstViewModel:

ShowViewModel<SecondViewModel>(
    new
    {
        code = ItemCode,
        descr = ItemDescription
    });
public void Init(string code, string descr)
{
    ...
}
非常简单,但只工作一次:(

什么原因可能导致这种行为


作为解决方法,我尝试“手动”加载viewmodel:

var d=新字典
{
{“代码”,ItemCode},
{“descr”,itemsdescription}
};
var b=新的MvxBundle(d);
var r=新的MvxViewModelRequest(b,null,null);
var m=Mvx.Resolve().LoadViewModel(r,null);
它解决了Init()方法调用的问题。但是我不知道如何使用m变量显示viewmodel。有人知道吗


为我糟糕的英语道歉,并提前感谢!

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

您可以通过将OnNavigatedTo覆盖到以下位置来创建自己的BasePage,该BasePage将覆盖此行为:

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

    base.OnNavigatedTo(e);
}

我不知道mvvmcross,但我认为您正在搜索“Load”方法或“Loaded”事件。很可能,除非您明确销毁视图,否则该视图已初始化,并在返回时从内存中撤回,而不是重新初始化。您可能对本文感兴趣:代码示例的第4行必须以分号结尾。无法编辑您的答案,因为编辑必须更改至少6个字符。谢谢Cheesebaron!它解决了我的问题。我现在开始出现其他类型的错误,但Init()的主要问题已经解决。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.NavigationMode == NavigationMode.New)
        ViewModel = null;

    base.OnNavigatedTo(e);
}