如何使用带MVVM和WPF的WF4将ViewModel传递给CodeActivity

时间:2012-02-03 17:24:58

标签: c# wpf mvvm workflow workflow-foundation-4

我正在尝试将我当前的WPF / MVVM应用程序集成到Workflow Foundation 4.0。

目前我的一个ViewModel方法正在调用我的示例CodeActivity,向它发送一些参数。

在我的CodeActivity执行方法中,我需要从调用ViewModel调用一些方法。我想知道最好的方法是做什么。到目前为止,我已经确定了三种可能的方式:

  1. 将我的ViewModel实例作为输入参数发送到我的CodeActivity
  2. 通过我的CodeActivity中的构造函数发送我的ViewModel实例,例如public MyCodeActivity(ViewModel vm)
  3. 在WorkflowApplication中包装我的CodeActivity并使用SynchronizationContext将我的ViewModel实例作为扩展名发送
  4. 到目前为止,我已经测试了选项2和3,它们显然运行良好。

    执行此操作以避免线程同步问题或其他问题的最佳方法是什么?

    提前致谢,

    修改 仅举几个可能的场景:如果用户从我的View中的给定下拉列表中选择值'X',我需要将对象childA和childB添加到通过我的ViewModel中的公共属性公开的ParentObject所包含的ObservableCollection中。创建子对象并将其添加到父对象的逻辑在我的ViewModel中。但我希望Workflow包含业务规则本身。

1 个答案:

答案 0 :(得分:1)

为什么您的CodeActivity需要了解有关特定视图模型的任何信息?我会寻找另一种解决方案,让您的活动尽可能保持独立性。我可以想到的两个选项:

  1. 使用抽象类或接口,以便您的活动不会绑定到单个视图模型,即InArgument<IViewModel>
  2. 使用事件聚合模式促进沟通(如果可能的话,如果WF4,可能还不太确定吗?),即为活动提供完成工作所需的工作,并让您的视图模型监听事件​​以接收来自活动
  3. 在不知道应用程序的具体情况的情况下,我不知道哪个选项最适合(或根本不工作),但我会避免给定视图模型与给定CodeActivity之间的直接连接。 / p>