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