【问题标题】:How can I implement composite Views of composite ViewModels?如何实现复合 ViewModel 的复合视图?
【发布时间】:2013-06-28 13:30:18
【问题描述】:

我刚刚开始使用(令人难以置信的出色)MVVMCross 进行我的第一个项目,但我不知道如何做一些看似相当基本的事情:复合视图。

假设我有一个Person(名字、姓氏等),而一个人有一个Address(街道、城市、邮政编码等)。所以我也会有一个PersonViewModel 和一个AddressViewModel

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

我(模糊地)理解用于显示视图的演示者概念,如 here 所讨论的那样,但我看不出如何处理从 Person 到 Address 的更改传播并返回。

假设 Person 对象有一个 Address 对象,但 PersonViewModel 在 AddressView 中通过传递某种地址 id 和补水来显示 AddressViewModel。然后,AddressView 将绑定到一个 不同 Address 对象,而不是 Person 包含的对象。我不知道如何使两者保持同步,这当然会破坏绑定的整个目的。

我应该如何做我想做的事?

【问题讨论】:

  • 不是 100% 肯定的(因此我将此作为评论而不是答案),但是如果您在每个变量中命名变量相同的东西(Person 与 PersonViewModel 等...),当您通过您的视图传递 PersonViewModel 或 AddressViewModel 时,绑定应该“自动”发生,并尝试将其返回到您的控制器或类似 Person 或 Address 本身的东西中。

标签: mvvmcross


【解决方案1】:

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

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

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

....

在 MvvmCross 中,您可以根据需要使用 ShowViewModel 和自定义演示者来更改 UI - 这在多个 MvvmCross 示例中得到了演示,包括拆分视图演示者 - http://slodge.blogspot.com/2013/05/n24-splitviewpresenter-n1-days-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 代码。

【讨论】:

  • Stuart,必须保持某种记录才能获得最彻底的 stackoverflow 答案。该视频回答了我的问题,以及我准备提出的 14 个左右的后续问题,并教会了我很多关于我需要做什么的知识。由于 iOS 中缺乏任何连贯的绑定机制,我一直对如何构建我的数据密集型应用程序感到有些不适,但是在发现了 MVVMCross 之后,我现在非常兴奋地开始。非常感谢您
【解决方案2】:

除了默认的 Views 导航之外,还有一个允许 Control 导航的插件,希望对您有所帮助:https://github.com/ChristianRuiz/MvvmCross-ControlsNavigation

【讨论】:

    【解决方案3】:

    请查看 MvvmCross 项目的自定义演示者的此实现。支持 android 中的 Fragments 以及多个 Fragment 到另一个 Fragment/Activity 中:

    https://github.com/JelleDamen/CustomMvxAndroidPresenter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-20
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      相关资源
      最近更新 更多