Exemplo n.º 1
0
        private static IEnumerable <IViewModel> GetPossiblyStaleItems(
            ValidationResult collectionResult,
            ICollectionValidationTarget target
            )
        {
            // This method is performance critical! It is not a good idea to loop
            // through all items and call 'IsValid'. Remember that is method is called
            // for each item of every collection (because the framework tries to
            // perform a collection validation for every item).

            var allDescendantsErrors = target
                                       .Collection
                                       .OwnerVM
                                       .Kernel
                                       .GetValidationResult(ValidationResultScope.Descendants)
                                       .Errors;

            var previouslyInvalidItems = allDescendantsErrors
                                         .Where(e => e.OriginatedFrom(target))
                                         .Select(e => e.Target.VM);

            var failedItems = collectionResult
                              .Errors
                              .Select(x => x.Target.VM);

            return(previouslyInvalidItems.Union(failedItems));
        }
Exemplo n.º 2
0
        internal bool OriginatedFrom(ICollectionValidationTarget target)
        {
            Check.NotNull(target, nameof(target));

            return
                (Target.Step == target.Step &&
                 Target.Collection == target.Collection &&
                 Target.Property == target.Property);
        }
Exemplo n.º 3
0
 public CollectionResult(
     ICollectionValidationTarget target,
     ValidationResult result,
     IEnumerable <IViewModel> possiblyStaleItems
     )
 {
     Target             = target;
     _result            = result;
     PossiblyStaleItems = possiblyStaleItems;
 }
Exemplo n.º 4
0
        public static CollectionResult Validate(ICollectionValidationTarget target)
        {
            ValidationResult collectionResult = target
                                                .Collection
                                                .OwnerVM
                                                .ExecuteValidationRequest(target.CreateValidationRequest());

            var possiblyStaleItems = GetPossiblyStaleItems(collectionResult, target);

            return(new CollectionResult(target, collectionResult, possiblyStaleItems));
        }
Exemplo n.º 5
0
        private CollectionResult ValidateCollectionIfNotInCache(ICollectionValidationTarget target)
        {
            CollectionResult cachedResult = _cachedCollectionResults
                                            .FirstOrDefault(cached => target.Equals(cached.Target));

            if (cachedResult == null)
            {
                cachedResult = CollectionValidationController.Validate(target);
                _cachedCollectionResults.Add(cachedResult);

                foreach (IViewModel item in cachedResult.PossiblyStaleItems)
                {
                    var r = new RevalidationRequest(item, target.Property);
                    EnqueueRevalidation(r);
                }
            }

            return(cachedResult);
        }