c# - MVVM 模式、ObservableObject

标签 c# wpf mvvm

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

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

谢谢!

最佳答案

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

模型类的设计应适合模型,并且不应更改以适应您的 View - 拥有 ViewModel 的首要目的是从您的 View 中抽象您的模型。模型不应该知道 View 。

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

然而,最纯粹的观点是包装您绑定(bind)到的所有内容,并且绝不将模型中的任何内容直接暴露给 View 。

关于c# - MVVM 模式、ObservableObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506922/

相关文章:

c# - 如何在选项卡 View 选择的 View (用户控件)中将焦点设置到文本框

ios - 使用两种类型的单元实现 MVVC 以进行向下钻取 UITableview

c# - MVVM:单独的 ViewModel 的目的是什么?

创建位图时 C# 内存不足

wpf - DoEvents : Dispatcher. 调用与 PushFrame

c# - 如何从像素字节数组创建 BitmapImage(实时视频显示)

wpf - 使用 TPL 时避免窗口 (WPF) 卡住

c# - 无法使用互联网 IP 地址连接到本地计算机 IP 地址

c# - 将颜色过滤器应用于位图对象

c# - 破译触发事件的控件