MVVM Pattern, ObservableObject



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

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

谢谢!

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

模型类的设计应该适合模型,而不应该为了适合您的视图而更改——首先使用ViewModel的目的是从视图中抽象您的模型。模型应该对视图一无所知。

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

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

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

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

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

希望能有所帮助。。

相关内容

  • 没有找到相关文章

最新更新