【问题标题】:other View(s) dependency?其他视图依赖项?
【发布时间】:2014-04-05 04:47:54
【问题描述】:

我有像图像一样的视图,而 ViewModel 有处理按钮(1、2、3、4)点击的命令。在工作区允许用户提供输入。根据输入,用户可以点击按钮;

每个按钮都会引导一个新窗口(使用 ViewModel 进行查看;其模型将从输入中获取)。新窗口有自己的逻辑来显示数据,具体取决于注入到 ViewModel 的模型。

根据 MVVM 标准,我在哪里为每个按钮指定各自的视图和视图模型? (在视图/视图模型中)。 我怎样才能指定相同的?

【问题讨论】:

  • 您必须使用 PRISM 为您的工作区域定义区域,然后根据您的要求加载模块/视图。
  • 感谢您的回复。我有一些关于你的回复的信息。但是有没有其他直接的方法(而不是使用 Prism/MVVM Light)?因为我们已经构建了应用程序。现在要转换所有的编码并不容易。
  • 您在此处显示的视图之上显示的视图窗口是(Window.Show() 或 Window.ShowDialog())还是工作区中显示的视图?
  • 实际计划是使用 ShowDialog 显示为新窗口。

标签: wpf vb.net mvvm


【解决方案1】:

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

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

  1. 小视图,例如图标、高级按钮等(它们更孤立,更可能与父级无关,因此易于管理和泛化)
  2. 大视图,例如窗户、面板(有很多孩子,以后更可能更改)

对于小视图,通用 ViewModel 可用于多个视图。但是对于大视图(考虑到将来可能发生的变化)最好不要使用单个共享的 ViewModel。但是,使用基本 ViewModel 类来实现一些共享功能(如果有的话)会很有帮助。

因此,请牢记这一点并专注于保持标准,我建议:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2013-04-17
    • 1970-01-01
    • 2019-12-13
    • 2014-12-09
    • 2020-09-16
    • 2013-04-30
    相关资源
    最近更新 更多