mvvmcross - View 模型中具有不同签名的多个 Init 方法不起作用

标签 mvvmcross

在我从另一个 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

正如它在 blog post 中所说,您引用“通常您可能只想在应用程序中使用一个” - 因此我建议重构为单个导航参数对象并使用您自己的基于 ViewModel 的逻辑来决定如何ViewModel 应该初始化。

如果您确实需要在三种不同情况下调用三个 Init 方法,那么您可以使用自定义方法(可能在 BaseViewModel 类中)轻松打包和解包您自己的参数对象,如 https://stackoverflow.com/a/19059938/373321

关于mvvmcross - View 模型中具有不同签名的多个 Init 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339600/

相关文章:

c# - 从 ViewModel 到 View Xamarin 的 MVVMCross Calling 函数

ios - 如何使用 MVVMCross 绑定(bind)到 UISegmentedControl 段的标题?

mvvm - UWP MvvmCross Bootstrap类不起作用

data-binding - 使用 AppCompatActivity 更新到 MvvmCross 4.0 后,DataBindings 被破坏

visual-studio - 如何为可移植类库构建目标包?

c# - CollectionView 单元格高度不会自动调整大小

xamarin.ios - 为什么 MvxStandardTableViewSource SelectedItem 无法正确更新?

xamarin.android - 如何使用 Mvvmcross 将图像 src 绑定(bind)到资源可绘制图像?

wpf - MvvmCross:在另一个 View 中查看(或等效于CaliburnMicro Conductor)

mvvmcross - MvvmCross Messenger插件清除订阅