【问题标题】:NOOB Challenge Implementing MVVM in WPFNOOB 挑战在 WPF 中实现 MVVM
【发布时间】:2010-05-04 14:42:41
【问题描述】:

首先,这是我对 MVVM 的第一次尝试……我买了它,我只是在实现它时遇到了一点麻烦。

我正在构建一个实用程序来帮助管理课程。我有一个 COURSE 对象,其中包含一些属性和方法以及 MODULES 的集合。每个模块都有一些属性、方法和对 PRESENTATION 对象和 LAB 对象的引用(每个都有一些属性。我首先实现了模型并编写了所有单元测试。

我现在的挑战是实现 UI(V 和 VM)...特别是 MVVM 的视图模型部分。

用户界面允许您创建课程、查看模块,然后对每个模块有一个主从视图,您可以在其中设置一些属性等。对于我的视图模型,我创建了一个对象来封装 COURSE 模型...公开一些属性,包括课程模块的 ObserveableCollection。

我遇到了一些让我陷入困境并寻求帮助的事情:

  1. 我不确定我是否通过创建封装 COURSE 模型的东西正确地处理了我的 VM 部分。因为我需要访问课程中的模块以及课程对象中的实验室和演示文稿。这是否意味着我也需要为每个虚拟机创建虚拟机?似乎我的做法是错误的,因为这种方法意味着我将封装模型中的每个对象,每个方法和属性也是如此?
  2. 在应用程序的 UI 中显示模块时,我需要按顺序上下移动。执行此操作的方法已融入 COURSE 模型。诀窍是当我从视图中使用这些方法时,它不会更新视图,因为课程对象位于 VM 中,而不是 M 中。我可以通过将我的 listview 的 DataContext 设置为 null 然后“修复”这个问题将其重置为与托管窗口(即课程)相同,但这并不理想。这些模块是一个可观察的集合,但它们不会更新,因为我在较低级别进行工作。

似乎我的虚拟机有点不对劲......有些东西告诉我,并非模型中的所有内容都应该封装在其中。

【问题讨论】:

  • 你的标题是 WPF,为什么是 Silverlight 标签?
  • 因为 MVVM 对两者都适用。

标签: wpf silverlight mvvm


【解决方案1】:
  1. 您不需要需要为模块或实验室创建 VM,拥有每个的 Observable 集合就足够了。但是......如果您需要对这些对象中的每一个拥有额外的权力,您可以拥有 ViewModel 的集合。 (就像 Josh Smith 的例子一样)
  2. 如果您的逻辑在模型中,您需要在对模型进行更改时刷新 ViewModel。

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2016-12-08
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多