繁体   English   中英

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

[英]How to pass ViewModel to CodeActivity using WF4 with MVVM and WPF

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

目前,我的ViewModel方法之一是调用我的示例CodeActivity向其发送一些参数。

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

  1. 将我的ViewModel实例作为输入参数发送到我的CodeActivity
  2. 通过我的CodeActivity中的构造方法(如public MyCodeActivity(ViewModel vm))发送ViewModel实例
  3. 将我的CodeActivity包装在WorkflowApplication中,并使用SynchronizationContext将ViewModel实例作为扩展发送

到目前为止,我已经测试了选项2和3,它们显然工作良好。

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

提前致谢,

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

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

  1. 使用抽象类或接口,以便您的活动不会绑定到单个视图模型,即InArgument<IViewModel>
  2. 使用事件聚合模式(如果可能的话,如果是WF4,还不太确定吗?)来促进通信,即为活动提供其工作所需的条件,并让您的视图模型侦听事件以从活动中接收更新

在不了解您的应用程序细节的情况下,我不知道哪个选项最有效(或根本不起作用),但是我会避免在给定的视图模型和给定的CodeActivity之间建立直接连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM