【问题标题】:MVVMCross - Bind the same ViewModel to 2 different ViewsMVVMCross - 将相同的 ViewModel 绑定到 2 个不同的视图
【发布时间】:2013-12-09 01:57:51
【问题描述】:

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

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

  1. 通过将 2 个视图绑定到同一个视图模型

编辑如何调用第二个视图?第二个视图实际上会使用共享 ViewModel 的相同实例吗?

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

我的问题是:

  • 如何实现方案 1,
  • 2中,Init()方法(配合ShowViewModel()方法使用)是否支持通过 参考

如果您能在答案中包含代码 sn-ps/examples,我将不胜感激。

非常感谢,

【问题讨论】:

  • @Stuart:嗨 Stuart,很抱歉一周后回来;只需编辑我的原始帖子并添加一个关于“将 2 个视图绑定到同一个视图模型”主题的附加问题/说明,我最初忘记提出:如何调用第二个视图?谢谢

标签: mvvm mvvmcross


【解决方案1】:

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

如果您愿意,您可以随意手动设置任何View 上的ViewModel 属性。只需在调用base.OnCreate()base.OnNavigatedTo()base.ViewDidLoad() 之前设置ViewModel = foo;

2、Init()方法(配合ShowViewModel()方法使用)是否支持引用传参?

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


一般来说,我使用从数据存储到 ViewModel 的消息来处理这种情况

如果您能在答案中包含代码 sn-ps/examples,我将不胜感激。

您可以在http://mvvmcross.wordpress.com/ 中看到我通常如何在 N=12 到 N=15 中执行此操作

【讨论】:

  • 谢谢斯图尔特。我会尝试/查看所有建议。
猜你喜欢
  • 2014-11-23
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多