MVVMCross - 将相同的ViewModel绑定到2个不同的视图

时间:2013-11-24 12:30:56

标签: mvvm mvvmcross

基本上我的场景如下:我有一个View绑定到ViewModel,带有一个项目列表(项目的类是我模型中的一个类)。每次从“列表视图”的列表中选择一个项目时,其字段将在另一个“详细信息视图”中进行编辑。这与客户管理示例场景相同,其中从列表中选择客户(在“列表视图”中),并且可以在“详细信息视图”中更改客户的详细信息。 在我的方案中添加的怪癖是,我希望对详细信息视图中的项目所做的更改将反映在列表视图中。更改将从详细信息视图保存在DB中。

此外,根据详细信息视图中所做的更改,可以在第一个视图中从列表中删除该项目。请注意,这不是从数据库中删除记录,因为列表视图中的列表只是数据库中项目的过滤列表。我想出了两种可能的方法:

  1. 通过将2个视图绑定到同一个视图模型
  2. 编辑如何调用第二个视图?第二个视图是否实际使用共享ViewModel的相同实例?

    - 或 -  2.将列表视图中选择的项目 按引用 传递给详细信息视图。因此,在这种情况下,我正在维护 1-View-to-1-ViewModel映射

    我的问题是:

    • 如何实施方案1,
    • in 2,Init()方法(与ShowViewModel()方法一起使用)是否支持传递参数 参考

    如果您能在答案中包含代码段/示例,我将不胜感激。

    提前多多感谢,

1 个答案:

答案 0 :(得分:2)

  

将2个视图绑定到同一个视图模型

如果您愿意,可以手动设置任何ViewModel View属性。在致电ViewModel = foo;base.OnCreate()base.OnNavigatedTo()

之前,只需设置base.ViewDidLoad()即可
  

in 2,Init()方法(与ShowViewModel()方法一起使用)是否支持通过引用传递参数?

MvvmCross不支持在ViewModel之间传递对象。在Windows Phone上,导航由url参数执行。在Android上,导航由Intent执行 - 这些底层机制根本不允许您传递实际的对象引用。


一般情况下,我使用从数据存储到ViewModel

的消息处理这种情况
  

如果您能在答案中包含代码段/示例,我将不胜感激。

您可以在http://mvvmcross.wordpress.com/

中看到我通常在N = 12到N = 15的情况下执行此操作
相关问题