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

C# 如何使用带有MVVM和WPF的WF4将ViewModel传递给CodeActivity,c#,wpf,mvvm,workflow,workflow-foundation-4,C#,Wpf,Mvvm,Workflow,Workflow Foundation 4,我尝试将当前的WPF/MVVM应用程序集成到工作流基础4中。 目前,我的一个ViewModel方法正在调用示例CodeActivity并向其发送一些参数 在CodeActivity执行方法中,我需要从调用ViewModel调用一些方法。我想知道最好的方法是什么。到目前为止,我已经确定了三种可能的方法: 将我的ViewModel实例作为输入参数发送到我的CodeActivity 通过CodeActivity中的构造函数发送我的ViewModel实例,如public MyCodeActivity(V

我尝试将当前的WPF/MVVM应用程序集成到工作流基础4中。 目前,我的一个ViewModel方法正在调用示例CodeActivity并向其发送一些参数

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

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

    什么是避免线程同步问题或其他问题的最佳方法

    提前感谢,

    编辑:
    仅提及一个可能的场景:如果用户从我的视图中给定的下拉列表中选择值“X”,我需要将对象childA和childB添加到通过我的ViewModel中的公共属性公开的ParentObject所包含的ObservableCollection中。创建子对象并将其添加到父对象的逻辑在我的ViewModel中。但是我希望工作流包含业务规则本身。

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

  • 使用抽象类或接口,使您的活动不绑定到单个viewmodel,即,
    inagrament
  • 使用事件聚合模式促进通信(如果可能的话,如果是WF4,对此还不太确定?),即,为活动提供它所需的工作,并让您的视图模型侦听事件以接收活动的更新

  • 在不了解应用程序的具体情况下,我不知道哪个选项最有效(或者根本不起作用),但我会避免在给定的视图模型和给定的
    代码活动之间建立直接联系,标准的方法是使用
    InArgument
    一些相关信息谢谢@crazyarabian的反馈。我在问题中添加了一个示例场景,以使问题更清楚。