请帮助我理解MVVM模式中的一件事:
例如,我需要在地图上显示城市。 在ViewModel中,我有ObservableCollection,它绑定到View ItemsSource。 ObservableCollection包含类型为“City”的对象。 必须“City” - 类继承自ObservableObject(我使用MVVM Toolkit)?或者我应该创建一个包装类,从ObservableObject继承它,在ViewModel中使用来自“City”对象的数据创建新的包装对象并将它们添加到集合中?
谢谢!
答案 0 :(得分:1)
假设您的City类在您的模型中,并且您实际需要了解城市对象上属性的更改 - 那么您应该为它创建一个包装器(即CityViewModel)。您的包装器应该收听通知City类的任何更改的事件,并触发相关的Property Change通知。
模型类应设计为适合模型,不应更改以适合您的视图 - 首先使用ViewModel的目的是从视图中抽象模型。模型应该对视图一无所知。
如果您的City类的属性没有改变,或者您不关心它们是否会改变(并且您不是纯粹主义者),那么您可以直接公开它 - 而不继承ObservableObject。 (虽然我不使用MVVM工具包,但我不明白为什么一般你需要继承ObservableObject只是因为你将City对象存储在ObservableCollection中。)
然而,纯粹主义者的观点是包装你绑定的所有内容,并且永远不会将模型中的任何内容直接暴露给视图。
答案 1 :(得分:1)
ObservableCollection或ObservableObject与MVVM模型无关。您可以在没有ObservableCollection和ObservableObject的情况下创建基于MVVM的应用程序(当您需要更改类的属性值时使用ObservableObject,但如果您的应用程序是只读的,则根本不需要它。)
MVVM - M-Model(业务层),V-View(GUI),ViewModel-(GUI的上下文)。
当XAML处理绑定时。您必须需要通知机制来通知GUI有些内容已更改。现在,如果更改集合意味着您从集合中添加或删除了一个项目,则需要提出一个通知,如果您正在使用ObservableCollection,则不需要该通知。类似地,如果您的类City具有属性Population,当更改需要通知GUI时,这就是需要创建ObservableObject的原因。
希望有所帮助......