2

複雑なデータオブジェクトがあると想像してください。オブジェクトのさまざまなプロパティを編集するには、ユーザーが複数の画面を使用するのが最適であるほど複雑でした。これは基本的に、構成済みアイテムのショッピングカートです。

したがって、1つの画面でアイテムを追加できます。もう1つは、これらのアイテムに変更を追加できるようにするもので、コストが関連付けられている事前に決定された変更です。3番目の画面では、アイテムのグローバル設定を構成できます。

ご想像のとおり、各画面はまったく同じカートで動作しており、内部のアイテムのさまざまなプロパティと関係を変更するだけです。

そこで、MVVMを使用してアプリケーションを作成しようとしています。さまざまな画面(および画面間のナビゲーション)について話し合っているときに、次の質問にたどり着きました。

MVVMを使用する場合、一般的にアプリケーションの状態をどのように管理しますか?ユーザーが画面を変更するために使用するナビゲーションバーは画面の外側にありますが、ユーザーがそれをクリックすると、ユーザーが1つを非表示にし、もう1つを表示するために使用している一般的な方法は何ですか。

より一般的には、人々はグローバルアプリケーションの状態をどのように処理していますか?ユーザーは一度に1つのカートのみを操作でき、一度にログインできるユーザーは1人だけであり、一度に表示できる画面は1つだけです。これらの重要なプロパティを格納するシングルトンを作成し、ViewModelsがそれらのコピーを保持し、イベントアグリゲーターを介して変更をサブスクライブできるようにするのが最善でしょうか?

お分かりのように、私はこの問題をどこから始めればよいのかほとんどわからないので、どんなアドバイスも歓迎され、喜ばれます。

4

2 に答える 2

3

ViewModelsを使用してアプリケーションの状態を追跡します。

1つのViewModelがアプリケーション全体を制御し、ユーザーが現在どのページを表示しているかを処理します。アプリケーション自体はメインのViewModelにバインドされており、アプリケーションの画面スペースの大部分は、ViewModel.CurrentPageにバインドされているContentControlです。次に、DataTemplatesを使用して、ユーザーが現在表示しているページに表示するビューを決定します。

以前は、一部のオブジェクト(現在のユーザーなど)にグローバルシングルトンを使用しましたが、ViewModelsは必要に応じてこれへの参照を使用します。したがって、ユーザー名をページに表示したい場合は、ViewModelにUserNameというプロパティがあり、次のようになります。Global.Instance.CurrentUser.UserName

于 2011-02-16T19:03:59.330 に答える
1

あなたのタイプの状況については、PRISMを調べます。PRISMは、緩く結合されたMVVM方式でWPFアプリケーションを開発するためのパターンのコレクションです。

PRISMリージョンマネージャーの例

具体的には、複数の画面の例とアプリケーションの状態の管理では、「コントローラー」を使用して、ViewModel(カート)のさまざまな表現のビューを別々の「リージョン」にロードすることから始めるとよいでしょう。ユーザーインターフェイス(地域)の作成など、PRISMの使用を開始する方法についてのMSDNに関するすばらしい記事があるようです。

于 2011-02-16T19:12:11.270 に答える