0

MVVMパターンを実装するWPFウィンドウがあります。ウィンドウには、ユーザーが選択することになっている使用可能なマイクのリストが表示されます。選択したマイクはリポジトリに保存されます。これはすべて正常に機能しますが、ここに問題があります。新しいマイクを接続するとメインウィンドウが表示され、「新しいデバイスが接続されました。選択しますか?」などのメッセージが表示されます。このメッセージをクリックすると、選択用のウィンドウがポップアップし、新しいデバイスがすでに選択されているはずです。ただし、xamlの背後にコードがなく、UIを真のMVVMパターンとして維持しようとしています。これが私が考えたいくつかのオプションですが、これを行うための「正しい」方法があるかどうかはわかりません。

  • ViewModelに渡される汎用グローバルアクションコントローラーを用意します。その後、ViewModelは次のようなイベントをサブスクライブできます。SelectionChangedEvent
    • これに伴う問題は、ウィンドウ(したがってビューモデル)がまだ開かれていない可能性があるため、メッセージが失われることです。
  • 上記のオプションを使用しますが、アクションコントローラが常に最初にウィンドウをロードするようにします。これにより、ViewModelが使用できないという問題が解決されます。
  • 私が考えていない他の解決策はありますか?
4

1 に答える 1

1

イベントアグリゲーターパターンは、通常、ビューモデル間の間接通信を可能にするために使用されます。このトピックにはたくさんの良いリンクがあります。Jeremy Millerのブレインダンプが好きですが、完全に理解するには背景を読む必要があります。

イベントアグリゲーターの基本的な要点は、一種のメッセージバスとして機能し、誰でも登録してメッセージの通知を受け取ることができ、誰でもメッセージをEAに公開できることです。特定のシナリオでは、次の3つの注意メッセージがあります。

  1. 新しいデバイスが追加されました
  2. デバイス選択のリクエスト
  3. 選択したデバイス

メインウィンドウは、新しいデバイス追加メッセージを公開します。(または、パブリケーションをスキップして、デバイス選択の要求メッセージを発行することもできます。RDSメッセージのプロパティの1つがデフォルトの選択である可能性があります)。デバイス選択を要求すると、デバイス選択ダイアログが表示されます。また、ユーザーがデバイスを選択すると、デバイス選択メッセージ(選択したデバイスに関する情報が含まれている必要があります)が表示されます。

新しいデバイスが選択されたことを知りたい人は誰でも、そのイベントに登録し、それに応じて応答します。

于 2012-10-01T19:08:14.943 に答える