WF4 дизайнер обновлений рабочего процесса

1

Мне удалось восстановить связь между двумя действиями после того, как другой (который существовал до этого между ними) был удален.

         if (containerAsFlowchart != null)
        {
            for (int i = 0; i < containerAsFlowchart.Nodes.Count; i++)
            {
                if (containerAsFlowchart.Nodes[i] is FlowStep)
                {
                    FlowStep fs = containerAsFlowchart.Nodes[i] as FlowStep;

                    if (fs.Next == null)
                    {
                        if (i < containerAsFlowchart.Nodes.Count - 1)
                        {
                            fs.Next = (FlowNode)((containerAsFlowchart.Nodes[i + 1] as FlowStep));
                        }
                    }

                }

            }
        }

Al работает нормально до сих пор, но даже если соединение было сделано назад, я не могу визуализировать его в дизайнере рабочих процессов. Если я расширяю или сворачиваю действие или любую другую операцию, которая обновляет рабочий процесс, эта красивая стрелка возвращается туда, но.. есть ли способ сделать это программно и вызвать эту перерисовку сразу после удаления одного действия?

Теги:
workflow-foundation-4
workflow-foundation
workflow-activity

1 ответ

1
Лучший ответ

Чтобы изменения были видны дизайнеру, вы должны непосредственно редактировать его ModelItem.

var modelItem = Designer.Context.Services.GetService<ModelService>().Root;

// Do changes through modelItem ...

Например, чтобы изменить DisplayName корневой активности:

modelItem.Properties["DisplayName"].Value = "New Name";

То, ModelItem делает ModelItem, состоит в том, чтобы сохранить каждую часть рабочего процесса в структуре агностической модели, от сложных типов до простого целого. Эта модель используется самим дизайнером для печати рабочего процесса на экране, среди прочего (чтение аргументов, переменных и т.д.).

Используйте отладчик и смотрите модель, чтобы узнать больше.

  • 0
    Спасибо за ваш ответ, я начну читать об этом. В этом случае я просто попытался изменить отображаемое имя. Действительно, событие ModelChanged возникает, но макет конструктора не обновляется. Из того, что я видел, он обновляется, когда я перемещаюсь по дереву, или ... чтобы быть более кратким, когда я разворачиваю и сворачиваю потоковые диаграммы ...
  • 1
    Хорошо, я понял, большое спасибо еще раз. Я неправильно понял, что вы сказали мне. Это работает отлично. Я получаю ModelItem для своего FowStep и вызываю .Properties ["Next"]. SetValue (((FlowNode) ((containerAsFlowchart.Nodes [i + 1] as FlowStep))); Возможно, я спрашиваю слишком много, но у меня есть один Еще вопрос. Я получаю этот элемент модели с некоторыми трудностями. Сначала я ищу в ModelService.Find и получаю все FlowSteps в конструкторе рабочих процессов, и только после того, как перебираю эту коллекцию и ищу подходящее имя ... есть более простой способ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню