Стиль проверки WorkflowFoundation не отображается в WFDesigner - PullRequest
0 голосов
/ 02 ноября 2011

В Приложении WF4 мне нужно проверить действие на основе пользовательских параметров, которые хранятся в базе данных.

Когда пользователь вводит некоторые значения и выбор изменяется в конструкторе, он перезаписывается CacheMetadata Метод вызывается следующим образом:

protected override void CacheMetadata(CodeActivityMetadata metadata)
{
  if (!ParamCache.ContainsKey(InstanceId.ToString())) return;

  var paramsToValidate = ParamCache.Get(InstanceId.ToString());

  var validationErrors = (from paramToValidate in paramsToValidate
      let errorMessage = paramToValidate.Validate()
      where !string.IsNullOrEmpty(errorMessage)
      select new ValidationError(errorMessage, false)).ToList();

 foreach (var validationError in validationErrors)
 {
   metadata.AddValidationError(validationError);
 }
}

Во время выполнения коллекция ошибок оценивается с использованием этого метода проверки:

public void Validate()
{
   var activity = ModelItem.GetCurrentValue() as Activity;
   if (activity != null)
   {
       var validationResults = ActivityValidationServices.Validate(activity);

       var designerRegionVieWModel = Parent as DesignerRegionViewModel;
       IsValid = validationResults.Errors.Count <= 0;

       ...       
}

Хотя были добавлены ValidationError объекты и IsValidЗначение false, дизайнер не обновляется для визуализации ошибок в стиле красного восклицательного знака.

Однако, если я добавлю несколько ошибок (для целей тестирования) прямо в начале метода CacheMetadata, ошибки будут отображаться по мере необходимости.

Может быть, это какая-то проблема синхронизации или есть какая-то дополнительная оценка времени выполнения, которая должна быть запущена?

1 Ответ

0 голосов
/ 23 июля 2012

Я узнал, как это работает. Весь рабочий процесс должен быть переоценен. Вы можете добиться этого с помощью WorkflowDesigner ValidationService.

var validationService = workflowDesigner.Context.Services.GetService<ValidationService>();
validationService.ValidateWorkflow();
...