尝试制作包含页面的Acrobat等文档查看器,每个页面都包含缩略图(用户可自行决定大小不等)。我不确定如何设计MVVM。 目前我有:
DocumentViewModel , PageViewModel , ThumbnailViewModel
DocumentViewModel具有ObservableCollection()//跟踪Pages
PageViewModel具有ObservableCollection()//跟踪要由文档显示的缩略图。
然而,这种设计会导致问题。例如,如果有3页缩略图。从页面2中删除了一半缩略图,然后第3页缩略图应自动重定位到第2页上的新可用空间。每个PageViewModel都必须相互了解,这会破坏MVVM策略,不是吗?在DocumentViewModel中声明的2 ObservableCollections会不会更好?
欢迎任何帮助,指示,建议和指导。
答案 0 :(得分:1)
ViewModels不需要彼此了解。
我建议使用您选择的任何MVVM框架,例如Caliburn Micro。 CM允许您在对象之间发送消息,而无需彼此了解并完全保持解耦。
简而言之,Caliburn Micro框架提供EventAgregator
来分发消息。需要发送消息的对象使用EventAggregator
注册消息类型,并且需要接收的对象也在EventAggregator
注册。
请在此处查看此示例:Introduction to messaging with Caliburn.Micro’s EventAggregator。
答案 1 :(得分:1)
PageViewModels不应该彼此了解。
DocumentViewModel将了解您拥有的PageViewModel,它可以处理ThumbnailViewModel的重新分发。让DocumentViewModel处理每页PageViewModel的页数和ThumbNailViewModel。
如果将ObnableCollection of Thumbnails移出到DocumentViewModel,您可以根据需要动态创建PageViewModel。每当ThumbnailViewModel集合发生变化时,您都会收到通知,然后您可以根据它更改PageViewModels。
答案 2 :(得分:0)
解决!我同时使用了helgeheldre建议使用DocumentViewModel作为控制器,以及Jen H建议使用Caliburn.Micro的框架进行消息传递。
所有消息都被路由到DocumentViewModel(通过EventAgregator),然后将其分配给各个PageViewModel。