我使用MvvmCross 3.5.1开发Win 8.1应用程序。用户按顺序浏览一些视图并返回到最后一个视图的第一个视图。在工作流的第一次迭代期间,一切都很完美。但是当用户再次启动工作流时 - 不会调用viewmodels中的Init()方法。当我第二次导航到ViewModel时,为什么不调用Init()方法?
例如,FirstViewModel和SecondViewModel之间的交互如下所示。
FirstViewModel:
ShowViewModel<SecondViewModel>(
new
{
code = ItemCode,
descr = ItemDescription
});
SecondViewModel:
public void Init(string code, string descr)
{
...
}
那么简单,但只能一次性:(
什么原因,可能需要这样的行为
由于w^orkaround我试图加载视图模型“手动”:
var d = new Dictionary<string, string>
{
{"code", ItemCode},
{"descr", ItemDescription}
};
var b = new MvxBundle(d);
var r = new MvxViewModelRequest<SecondViewModel>(b, null, null);
var m = Mvx.Resolve<IMvxViewModelLoader>().LoadViewModel(r, null);
它与初始化解决了这个问题()方法调用。但我不知道如何使用变量显示视图模型。有谁知道?
道歉为我可怜的英语,并提前致谢!
我不知道mvvmcross,但我认为你正在寻找“装载”方法或“装载“事件。 – Kilazur
可能除非你明确地销毁它已经初始化的视图,并且在返回时从内存拉回来,而不是重新初始化。 –
这篇文章可能会让你感兴趣:http://stackoverflow.com/questions/17857543/mvvmcross-viewmodel-caching-and-re-initializing – momar