首页 文章

MVVM模式,ObservableObject

提问于
浏览
2

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

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

谢谢!

2 回答

  • 1

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

    模型类应该设计为适合模型,不应该更改以适合您的视图 - 首先拥有ViewModel的目的是从您的视图中抽象模型 . 模型应该对View一无所知 .

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

    然而,纯粹主义视图是将您绑定的所有内容包装起来,并且永远不会将模型中的任何内容直接暴露给视图 .

  • 1

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

    MVVM - M模型(业务层),V-View(GUI),ViewModel-(GUI的上下文) .

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

    希望能帮助到你..

相关问题