Ejemplo n.º 1
0
        /// <summary>
        /// Called when the object is validating.
        /// </summary>
        /// <param name="validationContext">The validation context.</param>
        protected override void OnValidating(IValidationContext validationContext)
        {
            base.OnValidating(validationContext);

            lock (_modelLock)
            {
                foreach (KeyValuePair <string, object> model in _modelObjects)
                {
                    if (model.Value is null)
                    {
                        continue;
                    }

                    if (!_modelObjectsInfo[model.Key].SupportValidation)
                    {
                        continue;
                    }

                    var validatable = model.Value as IValidatable;
                    if (validatable != null)
                    {
                        validatable.Validate();
                    }
                }
            }

            lock (ChildViewModels)
            {
                var previousValue = _childViewModelsHaveErrors;

                _childViewModelsHaveErrors = false;

                var childViewModels = ChildViewModels.ToArray();
                foreach (var childViewModel in childViewModels)
                {
                    childViewModel.Validate();
                    if (childViewModel.HasErrors)
                    {
                        _childViewModelsHaveErrors = true;
                        RaisePropertyChanged(() => HasErrors);
                    }
                }

                if (!_childViewModelsHaveErrors && _childViewModelsHaveErrors != previousValue)
                {
                    RaisePropertyChanged(() => HasErrors);
                }
            }
        }
        /// <summary>
        /// Called when the object is validating.
        /// </summary>
        protected override void OnValidating()
        {
            base.OnValidating();

            lock (_modelObjects)
            {
                foreach (KeyValuePair <string, object> model in _modelObjects)
                {
                    if (model.Value == null)
                    {
                        continue;
                    }

                    var modelValueAsModelBaseBase = model.Value as ModelBase;
                    if (modelValueAsModelBaseBase != null)
                    {
                        modelValueAsModelBaseBase.Validate();
                    }
                }
            }

            lock (ChildViewModels)
            {
                var previousValue = _childViewModelsHaveErrors;

                _childViewModelsHaveErrors = false;

                var childViewModels = ChildViewModels.ToArray();
                foreach (IViewModel childViewModel in childViewModels)
                {
                    childViewModel.ValidateViewModel();
                    if (childViewModel.HasErrors)
                    {
                        _childViewModelsHaveErrors = true;
                        RaisePropertyChanged(() => HasErrors);
                    }
                }

                if (!_childViewModelsHaveErrors && (_childViewModelsHaveErrors != previousValue))
                {
                    RaisePropertyChanged(() => HasErrors);
                }
            }
        }