我使用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 变量显示视图模型。有人知道吗?
为我可怜的英语道歉并提前致谢!
答案 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);
}