WF4 Rehosted Designer OnActivityAdded事件?

时间:2011-07-11 18:49:28

标签: workflow-foundation-4

我正在考虑重新托管工作流设计器。我想能够在用户向设计师游说添加活动时运行一些代码。当用户在设计时添加活动时是否会触发事件?或者我可以使用活动的活动吗?谢谢!

1 个答案:

答案 0 :(得分:3)

对于任何可能偶然发现这一点的人来说,这就是我想出来的......

首先,在创建工作流设计器时,您需要订阅ModelChanged事件。

        _workflowDesigner = new WorkflowDesigner();
        _workflowDesigner.Load(new Sequence());

        ModelService ms = _workflowDesigner.Context.Services.GetService<ModelService>();
        if (ms != null)
            ms.ModelChanged += new EventHandler<ModelChangedEventArgs>(ms_ModelChanged);

我的事件处理程序看起来像这样......

    void ms_ModelChanged(object sender, ModelChangedEventArgs e)
    {
        if (e.ItemsAdded != null && e.ItemsAdded.Count<ModelItem>() == 1)
        {
            ModelItem item = e.ItemsAdded.FirstOrDefault<ModelItem>();
            var test = item.GetCurrentValue() as MyActivityType;

            if (test != null && test.Id == null)
            {
                //do whatever initialization logic is needed here
            }
        }
    }

我需要赞扬this来源,指出我正确的方向。

要注意的一件事 - 当你在模型中移动一个活动时,会引发两个事件,一个删除和一个添加。此时,我不需要担心我是否正在添加或移动活动,因为我可以判断它是否已经初始化,但是如果您需要知道某些内容是否真的添加到模型中,您可能需要跟踪这两个事件。