2012-10-24 94 views
0

試圖製作一個文檔查看器,例如由頁面組成的Acrobat,每個頁面由縮略圖圖像組成(用戶可以根據不同的尺寸進行選擇)。我不知道如何設計MVVM。 目前我有:WPF初學者MVVM指導

DocumentViewModelPageViewModelThumbnailViewModel

DocumentViewModel具有的ObservableCollection()//跟蹤頁面

PageViewModel具有的ObservableCollection()//跟蹤要按文檔顯示的縮略圖。

但是,這種設計會導致問題。例如,如果有3頁縮略圖。從第2頁中刪除了一半的縮略圖,然後第3頁的縮略圖應該自動重新定位到第2頁的新可用空間。每個PageViewModel都必須具有對彼此的瞭解,這會違反MVVM策略,不是?在DocumentViewModel中聲明2 ObservableCollections會更好嗎?

任何幫助,指針,建議,指導歡迎。

回答

0

解決!我同時使用helgeheldre關於使用DocumentViewModel作爲控制器的建議和Jen H建議使用Caliburn.Micro的消息框架。

所有消息都被路由到DocumentViewModel(通過EventAgregator),然後將任務委託給單獨的PageViewModel。

1

ViewModels不需要知道對方。

我建議使用您選擇的任何MVVM框架,例如Caliburn Micro。 CM允許您在對象之間發送消息,而不需要他們相互瞭解並將它們完全保留decoupled

簡而言之,Caliburn Micro框架提供了一個EventAgregator來發送消息。需要發送消息的對象還在EventAggregator上註冊消息類型EventAggregator以及需要接收訂閱的對象。

查看此處的示例:Introduction to messaging with Caliburn.Micro’s EventAggregator

+0

感謝您的提示,我還沒有使用MVVM框架,我正在閱讀您的鏈接 – ChaseTheSun

1

PageViewModels不應該知道對方。

DocumentViewModel將知道您擁有的PageViewModels,它可以處理ThumbnailViewModels的重新分配。讓DocumentViewModel處理每個PageViewModel的頁數和ThumbNailViewModel。

如果您將縮略圖的ObservableCollection移出到DocumentViewModel,您可以根據需要動態創建PageViewModels。每當ThumbnailViewModel集合發生變化時,您將收到通知,然後您可以基於此更改PageViewModel。

+0

關於您的最後一句話,誰來處理重新分配? PageViewModels?難道這不需要相互認識嗎?或者DocumentViewModel處理重新分配? – ChaseTheSun

+0

我的想法是將該責任交給DocumentViewModel,因爲它將負責創建PageViewModels,我發現它會將ThumbnailViewModel分發給它們 – helgeheldre