1

MVVMとCastleWindsorを使用した最初のWPFプロジェクトを開始しています。私は、ビューモデルをビューのコンストラクターに挿入するというかなり標準的なアプローチに従っています。コンストラクターは、DataContextをビューモデルに設定します。私がはっきりしていないのは、ウィンドウがロードされた直後に実行したいUI「初期化」を実行する方法/場所です(私の場合、多数のユーザーコントロール「ウィジェット」をインスタンス化して、それらをウィンドウのキャンバス)。

おそらく、ウィンドウのビューモデルのコンストラクターでこれを行うことはできません。これは、ビューのInitialiseComponentが呼び出される前に呼び出されるためです。さらに、ビューの知識がないはずのビューモデルからキャンバスを参照するにはどうすればよいですか?

これを解決するための試みの一環として、キャンバスにユーザーコントロールを追加するための「DesktopManager」コンポーネントを作成しましたが、循環参照を取得しています。-

  • ビューは明らかにビューモデルに依存しています
  • DesktopManagerはビューに依存しています(Canvasにアクセスする必要があります)。
  • ビューモデルはDesktopManagerに依存しています(したがって、DesktopManagerにウィジェットを作成するように指示できます)。

ただし、DesktopManagerはまだ役に立ちません。以前の質問を振り返ると、ウィジェットを作成するためにDesktopManagerを呼び出す方法と場所がわかりません。私は明らかにこれをすべて間違った方法で行っています、そしておそらく私の以前の質問に答えることはこれも解決するでしょう!

任意の提案をいただければ幸いです。

アンドリュー

4

1 に答える 1

1

ビューがロードされた後でビューモデルでコードを実行する方法を探している場合は、ビューのLoadedイベントをビューモデルのコマンドにバインドすることをお勧めします。

イベントをコマンドにバインドする1つの方法については、こちらをご覧ください: http ://www.danharman.net/2011/08/05/binding-wpf-events-to-mvvm-viewmodel-commands/

于 2012-05-28T15:43:45.460 に答える