私はWPF、MVVM、Prism、およびMEFを使用しているアプリケーションで作業しています。MVVM、PRISM、およびMEFを使用して、ユーザーの要求なしでビューモデルからUIインタラクションを処理する方法
私は、リクエストナビゲーション付きのナビゲーション、リージョンマネージャを使用したビュー管理を備えたコントローラ、イベントアグリゲータ経由のイベントを組み合わせて1つのウィンドウでアプリケーションを実行しています。私はStock Trader RIがどのように働いているかに似た視点のアプローチを採用しています。 これは、UI(ビジーインジケータ)と対話するビューモデルコードがユーザーによって開始されたときに効果的ですが、背後で開始されると問題が発生する可能性があります。
これは実装が不適切なように思えますが、有効なシナリオがあると思います。私の特定の例は、ログインと関連しています。
現在、アプリケーションはシェルを起動して読み込みます。ログインビューは、シェルのメインコンテンツ領域にロードされます。ユーザが「ログイン」をクリックするとビジーインジケータが表示され、クライアントアプリケーションサービスのログインが実行されます。ログインが完了すると、ビジーインジケータが消え、画面はユーザのホーム画面にナビゲートされます。
ナビゲーションのログインとナビゲーションがログインボタンをクリックして開始されるため、これはうまくいきます。
これで、ユーザーが次回にアプリケーションを起動するときにログインビューが表示されず、ログインが舞台裏で行われるように、ユーザーがログインフォームで自動ログインを選択できるという新しい要件があります。
自動ログイン機能を呼び出すだけであれば、問題はありません。これは、それ自体でUIのやりとりがなく、正常に動作します。しかし、ログインには数秒かかり、ビジー状態のインジケータを表示したい。
問題はどこで自動ログイン呼び出しを開始するのですか?シェルビューモデルコンストラクタ?シェルビューモデルPartImportsSisisfied実装?これらの場所のいずれにおいても、シェルビュー(ビジーインジケータを含む)は実際にはまだロードされていません。その結果、地域や地域のマネージャーのような必要なリソースはありません。 それでは、私はこれを実装するための良い方法かもしれません:以前のユーザーならば
チェックすると、自動ログイン(この部分は考え出しました)
If yes then
Show busy indicator
Attempt to auto login
If auto login was success
Hide busy indicator
Navigate to user home screen
Else
Hide busy indicator
Navigate to login screen
Else
Hide busy indicator
Navigate to the login screen
任意のアイデアは大歓迎されている必要があります。
それは良い点です。現実的には私はこれらの場所を使わず、作曲中のPrism/MEFのエントリーポイントを説明するために使っていました。だから私の質問はあなたに戻っています。 ShellViewModelでILoadable.Loadを呼び出すのは何ですか? – BernicusMaximus
@BernicusMaximus追加ポイントを追加しました... –