private void ValidateAndSetValueWithExistingController(IBehaviorContext context, ValidationController controller, TValue newValue)
        {
            ValidationResult validationResult = controller.GetResult(_step, context.VM, _property);

            if (validationResult.IsValid)
            {
                _invalidValueCache.Clear(context);
                SetValueNext(context, newValue);
            }

            _resultManager.UpdateValidationResult(context, validationResult);
        }
        public void Revalidate(IBehaviorContext context)
        {
            ValidationController controller = _validationController.Get(context);
            var validationResult            = controller.GetResult(_step, context.VM, _property);

            bool valueWasInvalid          = _invalidValueCache.HasValue(context);
            bool valueIsNotInvalidAnymore = validationResult.IsValid;

            if (valueWasInvalid && valueIsNotInvalidAnymore)
            {
                TValue previouslyInvalidValue = _invalidValueCache.Get(context);

                _invalidValueCache.Clear(context);
                SetValueNext(context, previouslyInvalidValue);
            }
            else
            {
                this.PropertyRevalidateNext(context);
            }

            _resultManager.UpdateValidationResult(context, validationResult);
        }