在主视图模型中,我从另一个视图模型收集数据,我在摘要中创建了两个或三个具有不同签名的公共Init方法。当我使用ShowViewModel从其他视图模型导航回基本视图模型时,我等待正确的Init方法将被执行,但这不会发生。关于在这里问候实用文件:
http://slodge.blogspot.ch/2013/03/v3-new-viewmodel-lifecycle.html
这应该是有用的: - /。
我将用一些代码来解释这个。
我的主视图模型是例如:
public class MainViewModel : MvxViewModel
{
MainViewModel() {}
public class ParameterFirst
{
public string Id { get; set; }
}
public class ParameterSecond
{
public string Id { get; set; }
}
public class ParameterSecond
{
public string Id { get; set; }
}
public class ParameterThird
{
public string Id { get; set; }
}
public void Init(ParameterFirst objFirst)
{
//do something
}
public void Init(ParameterSecond objSecond)
{
//do something
}
public void Init(ParameterThird objThird)
{
//do something
}
}
然后我将从另一个viewmodel导航并等待执行正确的Init方法:
public class CollectData_ONE_ViewModel : MvxViewModel
{
CollectData_ONE_ViewModel() {}
public void DidWork()
{
//Hopefully the Init method with argument ParameterFirst should be called
base.ShowViewModel<MainViewModel>(new MainViewModel.ParameterFirst { Id = "11" });
}
}
接下来是第二个viewmodel
public class CollectData_SECOND_ViewModel : MvxViewModel
{
CollectData_SECOND_ViewModel() {}
public void DidWork()
{
//Hopefully the Init method with argument ParameterFirst should be called
base.ShowViewModel<MainViewModel>(new MainViewModel.ParameterSecond { Id = "22" });
}
}
和第三个视图模型
public class CollectData_THIRD_ViewModel : MvxViewModel
{
CollectData_THIRD_ViewModel() {}
public void DidWork()
{
//Hopefully the Init method with argument ParameterFirst should be called
base.ShowViewModel<MainViewModel>(new MainViewModel.ParameterThird { Id = "33" });
}
}
在我的代码中,每次调用First Init方法时,我真的都在最后,没有进一步的想法:)这里有没有人遇到过同样的问题?或者这里有人有另一个想法以优雅的方式收集数据到主视图模型?非常感谢提前阅读:)
答案 0 :(得分:2)
MvvmCross中的Init
机制是故意轻量级的。如果声明多个方法,则会调用所有方法 - 这是设计的。此外,如果某些Init
参数对象要共享属性,那么这些属性会发生冲突 - 请参阅Custom types in Navigation parameters in v3
正如你所引用的blog post所说的那样“通常你可能只想在你的应用程序中使用一个” - 所以我建议重构一个导航参数对象并使用你自己的基于ViewModel的逻辑决定ViewModel应该如何初始化。
如果您确实需要在三种不同情况下调用三个Init
方法,那么您可以使用自定义方法(可能在BaseViewModel类中)轻松打包和解压缩您自己的参数对象,如https://stackoverflow.com/a/19059938/373321