2012-02-03 63 views
0

我正在嘗試將當前的WPF/MVVM應用程序集成到Workflow Foundation 4.0中。如何將ViewModel傳遞給使用帶MVVM和WPF的WF4的CodeActivity

目前我的ViewModel方法之一是調用我的示例CodeActivity發送它的一些參數。

在我的CodeActivity執行方法的內部,我需要從調用ViewModel調用一些方法。我想知道最好的方法是做什麼。到目前爲止,我已經確定了三種可能的方式:

  1. 發送我的視圖模型實例作爲輸入參數,以我的CodeActivity
  2. 通過構造函數發送我的ViewModel比如在我的CodeActivity像公共MyCodeActivity(視圖模型VM)
  3. 總結我的CodeActivity在WorkflowApplication中,並使用SynchronizationContext發送我的ViewModel實例作爲擴展使用SynchronizationContext

到目前爲止,我已經測試了選項2和3,它們很好地工作。

什麼是最佳方法來避免線程同步問題或其他問題?

由於提前,

編輯: 僅舉一個可能的方案:如果用戶從在我看來,我需要的對象childA和childB添加到一個ObservableCollection給定的下拉列表中選取值「X」由通過ViewModel中的公共屬性暴露的ParentObject包含。創建子對象並將它們添加到父對象的邏輯位於我的ViewModel中。但我希望Workflow包含業務規則本身。

+0

標準的方法是使用'InArgument ' – 2012-02-03 17:35:53

+0

一些相關信息[WF,View,ViewModel,How to Communicate?](http://social.msdn.microsoft.com/Forums/hu-HU/ wfprerelease/thread/37f226a1-a897-4e7a-82df-e20808d05812) – 2012-02-03 18:54:12

回答

1

爲什麼您的CodeActivity需要知道關於特定視圖模型的任何內容?我會尋找另一種解決方案,讓您的活動儘可能地保持獨立性。兩種選擇,我能想到的把我的頭頂部:

  1. 使用抽象類或接口,使您的活動未綁定到一個單一的視圖模型,即InArgument<IViewModel>
  2. 使用事件聚合模式促進交流(如果可能的話,如果WF4,對此還不太確定嗎?),即給活動做它需要的工作,並讓你的視圖模型監聽事件​​以接收來自活動的更新

不知道你的應用程序的細節,我不知道哪個選項最好(或者工作),但我會避免直接c在給定的視圖模型和給定的CodeActivity之間建立連接。

+0

感謝@crazyarabian的反饋意見。我在我的問題中添加了一個示例場景以使其更清晰。 – 2012-02-03 18:12:12

相關問題