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