NOOB挑战在WPF中实现MVVM

时间:2010-05-04 14:42:42

标签: wpf silverlight mvvm

前言,这是我第一次尝试MVVM ...我买它,我只是在实现它时遇到了一些麻烦。

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

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

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

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

  1. 我不确定是否通过创建封装COURSE模型的东西来正确处理我的VM部分。因为我需要在课程中访问MODULES以及COURSE对象中的LAB和PRESENTATION。这是否意味着我还需要为每个人创建VM?好像我这样做是错误的,因为这种方法意味着我将封装模型中的每个对象,每个方法和属性都是一样的吗?
  2. 在应用程序的UI中显示模块时,我需要按顺序上下移动。执行此操作的方法将被烘焙到COURSE模型中。诀窍是当我从视图中使用这些方法时,它不会更新视图,因为课程对象存在于VM中,而不是M中。我可以通过将listview的DataContext设置为null来“修复”此操作将其重置为与托管窗口(即COURSE)相同,但这并不理想。这些模块是一个可观察的集合,但它们不会更新,因为我正在较低层次上进行工作。
  3. 似乎我的虚拟机有点不对......有些东西告诉我,不是模型中的所有内容都应该封装在其中。

1 个答案:

答案 0 :(得分:1)

  1. 您没有需要来为模块或实验室创建VM,每个的Observable集合就足够了。但是......如果你需要对每个对象都有额外的权力,你可以拥有ViewModel的集合。 (正如Josh Smith的例子那样)
  2. 如果您的逻辑位于模型中,则需要在对模型进行更改时刷新ViewModel。