在我从另一个 View 模型收集数据的主视图模型中,我总结了两个或三个具有不同签名的公共(public) Init 方法。当我使用 ShowViewModel 从其他 View 模型导航回基本 View 模型时,我等待执行正确的 Init 方法,但这并没有发生。关于greet实用文档在这里:
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
}
}
然后我将从另一个 View 模型导航并等待执行正确的 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" });
}
}
接下来是第二个 View 模型
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" });
}
}
和第三个 View 模型
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 方法时,我真的已经到了最后并且没有进一步的想法:)这里有人遇到过同样的问题吗?或者这里有人有另一个想法以优雅的方式将数据收集到主视图模型吗?非常感谢您的阅读:)
最佳答案
MvvmCross 中的 Init
机制是故意设计的轻量级。如果您声明多个方法,所有这些方法都会被调用 - 这是设计使然。此外,如果某些 Init
参数对象要共享属性,那么它们会发生冲突 - 请参阅 Custom types in Navigation parameters in v3
如果您确实需要在三种不同情况下调用三个 Init
方法,那么您可以使用自定义方法(可能在 BaseViewModel 类中)轻松打包和解包您自己的参数对象,如 https://stackoverflow.com/a/19059938/373321
关于mvvmcross - View 模型中具有不同签名的多个 Init 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339600/