2012-02-03 10 views
0

現在のWPF/MVVMアプリケーションをWorkflow Foundation 4.0に統合しようとしています。MVVMとWPFでWF4を使用してViewModelにCodeActivityを渡す方法

現在、私のViewModelメソッドの1つでは、サンプルCodeActivityを呼び出して、いくつかのパラメータを送信しています。

私のCodeActivity実行メソッドの中で、私は呼び出し側のViewModelからいくつかのメソッドを呼び出す必要があります。私はこれを行う最良の方法が何であるか知りたいと思います。

  1. 公共MyCodeActivityのように私のCodeActivityにコンストラクタを通じて私のViewModelのインスタンスを送る私のCodeActivity
  2. に入力引数としての私のViewModelのインスタンスを送信する(ViewModelにVM)
  3. ラップ:これまでのところ私は3つの方法を特定しましたWorkflowApplicationのCodeActivityを呼び出し、SynchronizationContextを使用してViewModelインスタンスを拡張機能として送信します。

これまでのところ、オプション2と3をテストしましたが、明らかにうまく機能しています。

スレッド同期の問題などの問題を避けるためにこれを行う最適な方法は何ですか?事前に

おかげで、

編集: だけで可能なシナリオに言及する:ユーザーが私の見解で与えられたドロップダウンリストから値「X」を選ぶならば、私はのObservableCollectionにオブジェクトchildAとchildBを追加する必要があります私のViewModelのpublicプロパティを介して公開されるParentObjectに含まれています。子オブジェクトを作成して親オブジェクトに追加するロジックは、私のViewModelにあります。しかし、私はワークフロー自体にビジネスルールを含めることを望んでいます。

+0

標準的な方法は、InArgument ' –

+0

いくつかの関連情報[WF、View、ViewModel、How to Communicate?](http://social.msdn.microsoft.com/Forums/hu-HU/)を使用することです。 wfprerelease/thread/37f226a1-a897-4e7a-82df-e20808d05812) –

答えて

1

CodeActivityは、特定のビューモデルについて何か知る必要があるのはなぜですか?私はあなたの活動が可能な限り独立性を維持することを可能にする別の解決策を探します。私は私の頭の上から考えることができる2つのオプション:あなたの活動が単一のviewmodelにバインドされていない、すなわち、InArgument<IViewModel>

  • は、イベント集計パターンを使用して通信を容易にするよう

    1. は、抽象クラスやインターフェイスを使用します(可能であれば、WF4はこれについてはまだ分かりません)、つまり自分の仕事をするために何をする必要があるかをアクティビティに伝え、アクティビティからアップデートを受け取るイベントを視聴モデルに聞かせてください。

    知らないうちにあなたのアプリケーションの詳細は、私はどのオプションが一番うまくいくか(または全く動作しないか)わからないが、私は直接的なc与えられたビューモデルと与えられたCodeActivityとの間の接続。

  • +0

    フィードバックに@crazyarabianさんに感謝します。私はそれをより明確にするためにサンプルシナリオを私の質問に追加しました。 –

    関連する問題