WPF MVVM初学者指南

时间:2012-10-24 11:19:24

标签: c# wpf silverlight mvvm

尝试制作包含页面的Acrobat等文档查看器,每个页面都包含缩略图(用户可自行决定大小不等)。我不确定如何设计MVVM。 目前我有:

DocumentViewModel PageViewModel ThumbnailViewModel

  

DocumentViewModel具有ObservableCollection()//跟踪Pages

     

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

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

欢迎任何帮助,指示,建议和指导。

3 个答案:

答案 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。