如何在UWP中重新实例化页面/视图模型?

时间:2016-05-23 16:53:06

标签: c# xaml xamarin mvvmcross uwp

我使用MvvmCross构建我的UWP应用程序。我有他们自己的视图模型的意见。   当我启动应用程序时,第一次从设置视图导航到使用ShowViewModel<PasscodeViewModel>()的密码视图。然后调用视图模型和视图构造函数来构建和初始化视图。当用户返回到设置视图并再次使用ShowViewModel<PasscodeViewModel>()之类的相同方法导航到密码视图时,则不会调用此时间视图和视图模型构造函数。由于无法重新初始化密码视图。所以它显示了密码视图的前一个实例。

以下解决方案我尝试了

我尝试删除导航中的backstack,但后来也没有构造函数调用。

同时实现加载的事件,但这个解决方案对我来说也不起作用。

在视图模型中也实现了Void Init(),但此方法也无法调用。

我只想在导航到PasscodeView时每次调用PasscodeView和PasscodeViewModel的构造函数。

所以我的问题是如何在每次导航时强制重新初始化页面和viewmodel? 请帮助解决此问题。

2 个答案:

答案 0 :(得分:2)

我需要在必需上使用导航缓存模式。

我用不太干净的解决方案再次调用init为我解决了这个问题。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (this.ViewModel!= null && e.NavigationMode != NavigationMode.Back)
    {
        var reqData = (string)e.Parameter;
        var converter = Mvx.Resolve<IMvxNavigationSerializer>();
        var req = converter.Serializer.DeserializeObject<MvxViewModelRequest>(reqData);
        this.Vm.CallBundleMethods("Init", new MvxBundle(req.ParameterValues));
    }

    base.OnNavigatedTo(e);
}

此代码避免在返回导航时再次调用init。

答案 1 :(得分:1)

我只是设置了通用Windows Phone应用程序页面导航缓存模式&#34;已禁用&#34;。我认为它的默认值是&#34;必需&#34;。

 public PasscodeView()
    {
        InitializeComponent();           
        NavigationCacheMode = NavigationCacheMode.Disabled;
    }

以上代码适用于我。