在另一个ViewModel中获取ViewModel参考

时间:2014-04-11 08:40:25

标签: xamarin.ios xamarin.android xamarin mvvmcross

我们有一个具有典型主/视图的应用程序。主视图显示故障单标题列表,如果单击故障单标题,则会看到包含故障单详细信息的视图。

主视图有一个模型,它是一个“故障单”对象列表,每个对象包含有关特定故障单的更多信息。我们在click上绑定了一个处理程序,它基本上实例化了一个新的细节视图并显示它。这很好,除了我们必须将所有配置值作为原始数据类型提供给构造函数(我们知道在实例化时我们不能使用对象)

我们考虑过另一种方法来做到这一点,但无法让它发挥作用。在Init()(详细视图模型)中,我们只传递ID(已点击的票证),并希望使用Mvx.Resolve来获取主视图模型。那么问题是,你能在其他视图模型中获取任意视图模型吗?

第二个想法是编写一个基本视图模型类,我们应用程序中的所有视图模型都从该模型类继承,它将实例化的视图模型注册到服务,以便您可以调用该服务并从任何位置获取视图模型(介体)图案)。这会违反框架吗?

我发现的一个答案是“使用信息”,但对我而言似乎有点笨重,至少我是如何理解这一点的。详细视图模型必须向主视图模型发送消息“我现在准备就绪”,然后主视图模型会说“好的,继承人配置”。

总结一下问题:

  1. 是否可以从其他视图模型中的框架中获取某些视图模型?
  2. 手动执行此操作是否会违反框架?
  3. 我们是否正确理解了消息方法,如果没有,那么更轻量级/通用的方法是什么?
  4. 干杯和谢谢

    汤姆

1 个答案:

答案 0 :(得分:2)

通常,当我必须跨View Model共享数据时,我使用服务来管理它。该服务通常通过IoC注入。

我将View Models视为服务和视图之间的中介。我的大部分逻辑都存储在服务中。我在视图模型中唯一拥有的是数据绑定的属性,调度到服务的命令以及其他表示级别的问题。

对于您的方案,我会让MasterViewModel将标识符传递给DetailViewModel,在那里它会通过ID向ConfigurationService询问配置。

希望这有帮助。