2

请帮助我理解 MVVM 模式中的一件事:

例如,我需要在地图上显示城市。在 ViewModel 中,我有 ObservableCollection,它绑定到 View ItemsSource。ObservableCollection 包含类型为“City”的对象。必须从 ObservableObject 继承“City”类(我使用 MVVM Toolkit)吗?或者我应该创建一个包装类,从 ObservableObject 继承它,在 ViewModel 中使用来自“城市”对象的数据创建新的包装对象并将它们添加到集合中?

谢谢!

4

2 回答 2

1

假设您的 City 类在您的模型中,并且您实际上需要了解 city 对象属性的更改 - 那么您应该为它创建一个包装器(即 CityViewModel)。您的包装器应该监听通知 City 类的任何更改的事件,并触发相关的 Property Change 通知。

模型类的设计应与模型相匹配,并且不应更改以适应您的视图 - 首先拥有 ViewModel 的目的是从您的视图中抽象您的模型。模型应该对视图一无所知。

如果您的 City 类的属性没有改变,或者您不在乎它们是否改变(而且您不是纯粹主义者),那么您可以直接公开它 - 无需继承 ObservableObject。(虽然我不使用 MVVM 工具包,但我不明白为什么你需要继承 ObservableObject 只是因为你将 City 对象存储在 ObservableCollection 中)。

然而,纯粹的视图是包装您绑定的所有内容,并且从不将模型中的任何内容直接暴露给视图。

于 2012-11-22T06:40:46.653 回答
1

ObservableCollection 或 ObservableObject 与 MVVM 模型无关。您可以在没有 ObservableCollection 和 ObservableObject 的情况下创建基于 MVVM 的应用程序(当您需要更改类的属性值时使用 ObservableObject,但如果您的应用程序是只读的,您甚至不需要它)。

MVVM - M-Model(业务层),V-View(GUI),ViewModel-(GUI的上下文)。

当 XAML 用于绑定时。您必须需要一种通知机制来通知 GUI 某些内容发生了变化。现在,如果更改集合意味着您从集合中添加或删除了项目,则需要发出通知,如果您正在使用 ObservableCollection,则不需要该通知。同样,如果你的类 City 有一个属性 Population,当更改需要通知 GUI 时,这就是为什么需要创建一个 ObservableObject。

希望能帮助到你..

于 2012-11-22T08:29:05.707 回答