1

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

  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 прекрасно работает до сих пор, но даже если подключение производится назад, я не могу представить себе его в конструкторе рабочих процессов. Если я расширяю или сворачиваю действие или любую другую операцию, которая обновляет рабочий процесс, эта красивая стрелка возвращается туда, но .. есть ли способ сделать это программно и вызвать эту перерисовку сразу после удаления одного действия?

ответ

1

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

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

// Do changes through modelItem ... 

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

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

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

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

+0

Спасибо за ваш ответ, я начну читать об этом. Однако в этом случае я просто попытался изменить отображаемое имя. Действительно, событие ModelChanged добавляется, но макет конструктора не обновляется. Из того, что я видел, он обновляется, когда я перемещаюсь по дереву, или ... чтобы быть более кратким, когда я расширяю и сворачиваю блок-схемы. –

+1

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

Смежные вопросы