我刚刚进入我的第一个项目(令人难以置信的优秀)MVVMCross,我无法弄清楚如何做一些看似相当基本的事情:复合视图。
假设我有一个Person
(FirstName,LastName等),一个人有一个Address
(街道,城市,邮政编码等)。所以我还会有PersonViewModel
和AddressViewModel
。
这是一个严格基于平板电脑的应用程序(实际上仅限iPad),我想使用遏制使PersonView
包含(可重用)AddressView
,以便外部(人)视图绑定到Person
,而内部(地址)视图绑定到Person.Address
。
我(模糊地)理解用于显示视图的演示者概念,正如所讨论的here,但我看不到如何处理从Person到Address和back的变化传播。
假设Person对象有一个Address对象,但PersonViewModel
通过传递某种Address ID并重新水化来显示AddressView中的AddressViewModel
。然后,AddressView绑定到不同的地址对象,而不是Person包含的地址对象。我不知道如何保持两者同步,这当然会破坏绑定的整个目的。
我该怎样做我想做的事?
答案 0 :(得分:11)
这是一个非常广泛的话题......
......并且有很多可能的答案。
我认为将ViewModel视为一个非常简单的概念非常重要 - 我想鼓励您将ViewModel视为视图模型 - 绝对不要将它们视为整页'对象。
...
在MvvmCross中,如果您愿意,可以使用ShowViewModel
和自定义演示者来更改UI - 这在几个MvvmCross示例(包括拆分视图演示者)中进行了演示 - http://slodge.blogspot.com/2013/05/n24-splitviewpresenter-n1-days-of.html
此ShowViewModel
技术对于navigation
非常有用 - 用于更改整个页面或其中的重要部分。
但是,如果您的应用不需要导航范例,则不必使用导航范例。
如果你愿意,那么你可以改为:
完全取决于你 - 你的应用为王。
...
我觉得我不能很好地解释这个......
...
所以我放弃并录制了这段视频 - 也许有帮助:http://slodge.blogspot.co.uk/2013/06/n32-truth-about-viewmodels-starring.html
视频和示例代码仅涵盖iPad,但我希望您能够轻松(如何)将其扩展到其他平台:
UserControl
MvxFrameControl
,自定义视图或Fragment
代码。答案 1 :(得分:0)
除了默认的视图导航外,还有一个允许控制导航的插件,希望它有所帮助:https://github.com/ChristianRuiz/MvvmCross-ControlsNavigation
答案 2 :(得分:0)
请查看MvvmCross项目的自定义演示者的此实现。支持android中的Fragments以及多个片段到另一个片段/活动: