0

尝试制作一个文档查看器,比如 Acrobat,它由页面组成,每个页面都由缩略图组成(大小由用户自行决定)。我不确定如何设计 MVVM。目前我有:

文档视图模型、页面视图模型缩略图视图模型

DocumentViewModel 有 ObservableCollection() // 跟踪 Pages

PageViewModel 有 ObservableCollection() // 跟踪要按文档显示的缩略图。

然而,这种设计会引起问题。例如,如果有 3 页缩略图。并且一半的缩略图从第 2 页中删除,然后第 3 页的缩略图应自动重新定位到第 2 页上的新可用空间。每个 PageViewModel 都必须了解彼此,这将违反 MVVM 策略,不是吗?在 DocumentViewModel 中声明 2 个 ObservableCollections 会更好吗?

欢迎任何帮助、指点、建议、指导。

4

3 回答 3

1

ViewModel 不需要相互了解。

我建议使用您选择的任何 MVVM 框架,例如Caliburn Micro。CM 允许您在对象之间发送消息,而它们彼此不知道,并使它们完全解耦

简而言之,Caliburn Micro 框架提供了一个EventAgregator发送消息的方法。需要发送消息的对象在 中注册消息类型EventAggregator,需要接收的对象也在 中订阅它们EventAggregator

请参阅此处的示例:使用 Caliburn.Micro 的 EventAggregator 进行消息传递简介

于 2012-10-24T11:40:12.510 回答
1

PageViewModels 不应该知道彼此。

DocumentViewModel 将知道您拥有的 PageViewModels,它可以处理 ThumbnailViewModels 的重新分发。让 DocumentViewModel 处理每个 PageViewModel 的页数和 ThumbNailViewModel。

如果将缩略图的 ObservableCollection 移到 DocumentViewModel 中,则可以根据需要动态创建 PageViewModel。每当 ThumbnailViewModel 集合更改时,您都会收到通知,然后您可以根据该通知更改 PageViewModels。

于 2012-10-24T12:00:16.443 回答
0

解决了!我使用了 helgeheldre 的使用 DocumentViewModel 作为控制器的建议和 Jen H 的使用 Caliburn.Micro 的框架进行消息传递的建议。

所有消息都被路由到 DocumentViewModel(通过 EventAgregator),然后由后者将任务委托给各个 PageViewModel。

于 2012-10-26T14:58:22.490 回答