0

ページで構成され、各ページがサムネイル画像で構成されている Acrobat のようなドキュメント ビューアーを作成しようとしています (サイズはユーザーの裁量で異なります)。MVVM の設計方法がわかりません。現時点で私は持っています:

DocumentViewModelPageViewModelThumbnailViewModel

DocumentViewModel には ObservableCollection() があります // ページを追跡します

PageViewModel has ObservableCollection() // ドキュメントごとに表示されるサムネイルを追跡します。

ただし、この設計は問題を引き起こします。たとえば、サムネイルが 3 ページある場合。また、サムネイルの半分がページ 2 から削除され、ページ 3 のサムネイルが自動的にページ 2 の新しく利用可能なスペースに再配置されます。DocumentViewModel 内で宣言された 2 つの ObservableCollections を用意したほうがよいでしょうか?

ヘルプ、ポインター、アドバイス、ガイダンスを歓迎します。

4

3 に答える 3

1

ViewModelはお互いを認識する必要はありません。

Caliburn Microなど、任意のMVVMフレームワークを使用することをお勧めします。CMを使用すると、オブジェクトがお互いを知らなくてもオブジェクト間でメッセージを送信し、オブジェクトを完全に分離しておくことができます。

簡単に言えば、CaliburnMicroフレームワークはEventAgregatorメッセージをディスパッチするためのを提供します。メッセージを送信する必要のあるオブジェクトは、メッセージタイプをに登録し、EventAggregator受信する必要のあるオブジェクトは、でもサブスクライブしますEventAggregator

ここでこの例を参照してください:Caliburn.MicroのEventAggregatorを使用したメッセージングの概要

于 2012-10-24T11:40:12.510 に答える
1

PageViewModels は、お互いを認識する必要はありません。

DocumentViewModel は、所有している PageViewModel を認識し、ThumbnailViewModel の再配布を処理できます。DocumentViewModel でページ数を処理し、PageViewModel ごとに ThumbNailViewModels を処理します。

Thumbnails の ObservableCollection を DocumentViewModel に移動すると、必要に応じて PageViewModels を動的に作成できます。ThumbnailViewModel コレクションが変更されるたびに通知が届き、それに基づいて PageViewModels を変更できます。

于 2012-10-24T12:00:16.443 に答える
0

解決しました!DocumentViewModelをコントローラーとして使用するというhelgeheldreの提案と、メッセージングにCaliburn.Microのフレームワークを使用するというJen Hの提案の両方を使用しています。

すべてのメッセージは (EventAgregator 経由で) DocumentViewModel にルーティングされ、その後、個々の PageViewModel にタスクが委任されます。

于 2012-10-26T14:58:22.490 に答える