在我收集 another viewmodels 数据的 main viewmodel 中,我总结了两个或三个具有不同签名的公共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方法时,我都真的在最后并且没有进一步的想法:)这里有没有人遇到过同样的问题?或者这里有没有人有另一个想法以优雅的方式收集数据到主视图模型?非常感谢您提前阅读:)
1 回答
MvvmCross中的
Init
机制是故意轻量级的 . 如果声明多个方法,则会调用所有方法 - 这是设计使然 . 此外,如果某些Init
参数对象共享属性,那么这些将发生冲突 - 请参阅Custom types in Navigation parameters in v3正如blog post中所述,您引用"generally you will probably only want to use one within your application" - 所以我建议重构一个导航参数对象,并使用您自己的基于ViewModel的逻辑来决定您的ViewModel应该如何初始化 .
如果您确实需要在三种不同情况下调用三个
Init
方法,那么您可以使用自定义方法(可能在BaseViewModel类中)轻松打包和解压缩您自己的参数对象,如https://stackoverflow.com/a/19059938/373321