如何实现复合ViewModel的复合视图?

Jos*_*ank 4 mvvmcross

我刚刚进入我的第一个项目(令人难以置信的优秀)MVVMCross,我无法弄清楚如何做一些看似相当基本的事情:复合视图.

假设我有一个Person(FirstName,LastName等),一个人有Address(街道,城市,邮政编码等).所以我也会有一个PersonViewModel和一个AddressViewModel.

这是一个严格基于平板电脑的应用程序(实际上只有iPad),我想使用包含来PersonView包含(可重用)AddressView,以便外部(人)视图绑定Person,而内部(地址)视图绑定到Person.Address.

我(依稀)了解演示概念展示的看法,讨论在这里,但我看不到如何处理的变化,从人传播到地址和背部.

假设Person对象有一个Address对象,但是通过传递某种Address id和rehydrating来PersonViewModel显示AddressViewModelAddressView.然后,AddressView绑定到与Person包含的Address对象不同的 Address对象.我不知道如何保持两者同步,这当然会破坏绑定的整个目的.

我该怎么做我想做的事情?

Stu*_*art 12

这是一个非常广泛的话题......

......而且有很多可能的答案.

我认为将ViewModel视为一个非常简单的概念非常重要 - 我想鼓励您将ViewModel视为视图模型 - 绝对不要将它们视为"整页"对象.

....

在MvvmCross中,您可以使用ShowViewModel和自定义演示者根据需要更改UI - 这在几个MvvmCross示例(包括拆分视图演示者)中进行了演示 - http://slodge.blogspot.com/2013/05/n24-splitviewpresenter- N1-天of.html

这种ShowViewModel技术非常有用navigation- 用于更改整个页面或其中的重要部分.

但是,如果您的应用不需要导航范例,则不必使用导航范例.

如果你愿意,那么你可以改为:

  • 在核心内构建自己的视图模型层次结构
  • 然后,您可以在UI中构建自己的数据绑定视图层次结构

这完全取决于你 - 你的应用程序是王道.

....

我觉得我不是很好解释......

....

所以我放弃并录制了这段视频 - 也许它有所帮助:http://slodge.blogspot.co.uk/2013/06/n32-truth-about-viewmodels-starring.html

视频和示例代码仅涵盖iPad,但我希望看到如何将其扩展到其他平台很容易(ish):

  • 对于Windows,您可以使用 UserControl
  • 对于Android,您可以使用MvxFrameControl,自定义视图或Fragment代码.