【问题标题】:MVVM-Light: Load UserControl into WindowMVVM-Light:将 UserControl 加载到窗口中
【发布时间】:2010-06-10 21:55:54
【问题描述】:

使用 MVVM-Light 将 UserControl 加载到窗口中的最佳做法是什么? 在哪里创建 UserControl 实例,在 ViewModel from Window 中还是直接在 window 中?

【问题讨论】:

  • 您能说得更具体一点吗? VM 绝对不应该创建用户控件。通常控件通过数据模板注入或直接包含在窗口 XAML 中。

标签: wpf window user-controls mvvm-light


【解决方案1】:

如果您担心最佳实践,您的虚拟机不应包含任何特定于 UI 的代码,例如控件。例如,如果您在 VM 中有一个属性控制视图中控件的可见性,则该属性的类型应为 bool 而不是 Visibility。视图将使用 bool 属性来隐藏或显示控件。

所以你有一个视图(就像一个窗口),它与 VM 绑定数据。 VM 中的某些属性更改将导致窗口中的某些代码创建并显示用户控件。

【讨论】:

    【解决方案2】:

    我刚刚阅读了this excellent post 关于使用 MVVM (Light) 创建选项卡式界面的信息。它没有谈论用户控件,但目标非常接近。很容易修改以支持用户控件。

    方法是将选项卡控件绑定到可观察的工作区集合(ViewModel)。添加新选项卡(或工作区)时,它会在 ViewModel 中实例化,添加到集合中,数据绑定到视图并在 DataTemplates 的帮助下呈现为新选项卡。

    【讨论】:

      【解决方案3】:

      如果你能展示一个使用 mvvm light 的例子,我会很高兴。 我还有一个问题,希望带有“子窗口”(用户控件)的主窗口在从主窗口单击按钮时显示/隐藏。 所以我应该在同一个地方创建它们,比如说网格列,然后通过属性绑定显示/隐藏它们?

      【讨论】:

      • 我认为这应该被重新措辞并作为一个新问题提出,但由于它是从 2010 年开始,2 1/2 年后的反对票将是愤怒的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2015-03-03
      • 2020-09-04
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 2016-12-10
      相关资源
      最近更新 更多