其他View(s)依赖?

时间:2014-04-05 04:47:55

标签: wpf vb.net mvvm

See the image

我有像图像的视图,ViewModel有命令来处理按钮(1,2,3,4)点击。在工作区域允许用户提供输入。根据输入用户的不同,单击按钮;

每个Button引导一个新窗口(View with ViewModel;其模型将从输入中获取)。新窗口有自己的逻辑来显示数据,具体取决于注入ViewModel的模型。

根据MVVM标准,我在哪里为每个Button指定相应的View和ViewModel? (在视图/视图模型中)。 我该如何指定相同的?

1 个答案:

答案 0 :(得分:0)

ViewModel基本上是View和Model之间的链接,因此View和Model的每个组合都应该有一个单独的ViewModel(如果有效)。

根据我的经验,在大多数情况下,我们处理两种观点:

  1. 小视图,例如图标,高级按钮等(它们更加孤立,更可能没有引用父母,因此它们易于管理和推广)
  2. 大视图,例如窗口,面板(有很多孩子,后来更有可能被更改)
  3. 对于小视图,常见的ViewModel可用于多个视图。但对于大型视图(考虑未来可能发生的变化),最好不要使用单个共享ViewModel。但是,使用基本ViewModel类来实现某些共享功能(如果有的话)是有帮助的。

    因此,请记住并专注于保持标准,我建议:

    • ViewModels for secondary windows :(根据我认为你需要的问题4)每个人都有自己独立的功能(你可以从BaseWindowVm派生出来)。这里的做法不是让他们知道他们的父(MainWindowVm),只是在实例化时设置他们的事件处理程序。这样就可以避免代码耦合。

    • MainWindowVm:由4个命令和一些其他输入组成。每个命令都执行以下步骤:

      1. 实例化视图
      2. 根据输入
      3. 实例化ViewModel for secondary window
      4. 设置Vm的事件处理程序
      5. 将Vm分配给View的DataContext
      6. 将Vm添加到MainWindowVm中的某个列表中(如果您想跟踪这些窗口)
      7. 的ShowDialog()

    最重要的部分是,由于ViewModels相互通信,因此将视图相互链接只会使其更复杂,更难以管理。所以视图就像是与ViewModel绑定的岛屿,其他一切都取决于ViewModels。