我使用MvvmCross
构建我的UWP应用程序。我有他们自己的视图模型的意见。
当我启动应用程序时,第一次从设置视图导航到使用ShowViewModel<PasscodeViewModel>()
的密码视图。然后调用视图模型和视图构造函数来构建和初始化视图。当用户返回到设置视图并再次使用ShowViewModel<PasscodeViewModel>()
之类的相同方法导航到密码视图时,则不会调用此时间视图和视图模型构造函数。由于无法重新初始化密码视图。所以它显示了密码视图的前一个实例。
以下解决方案我尝试了
我尝试删除导航中的backstack,但后来也没有构造函数调用。
同时实现加载的事件,但这个解决方案对我来说也不起作用。
在视图模型中也实现了Void Init()
,但此方法也无法调用。
我只想在导航到PasscodeView时每次调用PasscodeView和PasscodeViewModel的构造函数。
所以我的问题是如何在每次导航时强制重新初始化页面和viewmodel? 请帮助解决此问题。
答案 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;
}
以上代码适用于我。