MVVM - 与其他VM共享封装模型

时间:2014-07-24 15:25:40

标签: windows-phone-8 mvvm parent-child messaging

在我的Windows Phone App中,有一个简单的分层模型,该模型由一个包含其他域对象集合的类组成。

在我的xaml中,我声明了一个ItemsContainer控件,它将上面提到的集合中的项呈现为简单的矩形。

现在,在VM级别,我的结构类似于我的模型,其中父虚拟机具有一组子虚拟机。每个子VM都封装了自己的模型。

每当用户点击绑定到子VM的视图时,应该以相关的子模型作为参数调用父模型对象的方法。这将反过来改变一些内部状态,这些内部状态将(可能)反映在所有子视图上(而不仅仅是被挖掘的视图)。

所以......鉴于我正在使用MVVM Light框架,我目前的实现如下:

  • Child-VM公开命令
  • 命令Execute方法将使用messenger通知tap-active事件的父VM。消息(GenericMessage类)内容将是VM封装的域对象
  • 父VM使用消息内容作为参数
  • 执行父模型的方法
  • 如果操作成功,则父VM发送新消息以通知子VM这一事实。消息内容再次是用作刚刚调用的方法中的参数的模型对象
  • Child-VMs会引发一些PropertyChanged事件,最终会更新绑定视图

它有效,但我填补它有点麻烦。最让我烦恼的是,当点击子视图时,关联的VM将广播其封装的模型对象。你觉得有更好的方法来实现这样一个系统吗?

提前感谢您的宝贵帮助

1 个答案:

答案 0 :(得分:1)

您是否可以将命令放在父视图模型上并将子视图模型作为命令参数传递?

父视图模型可以只调用子视图模型上的方法来更新它们。我不确定是否需要所有这些消息?