public virtual bool Validate()
        {
            ClearErrors();
            var validationContext = new ValidationCommandContext();

            _validationRules.Values.SelectMany(c => c).ForEach(c => c.ExecuteCommand(validationContext));

            if (!validationContext.IsValid)
            {
                foreach (var validationResult in validationContext.Errors)
                {
                    var propertyNames = validationResult.MemberNames.Any() ? validationResult.MemberNames : new string[] { "" };
                    foreach (string propertyName in propertyNames)
                    {
                        if (!_errors.ContainsKey(propertyName))
                        {
                            _errors.Add(propertyName, new List <ValidationResult>()
                            {
                                validationResult
                            });
                        }
                        else
                        {
                            _errors[propertyName].Add(validationResult);
                        }
                        RaiseErrorsChanged(propertyName);
                    }
                }
                return(false);
            }
            return(true);
        }
        public virtual bool Validate(string propertyName)
        {
            var validationCommands = GetValidationRules(propertyName);

            var validationContext = new ValidationCommandContext();

            validationCommands.ForEach(c => c.ExecuteCommand(validationContext));

            ClearErrors(propertyName);

            if (!validationContext.IsValid)
            {
                AddErrors(propertyName, validationContext.Errors);
            }

            return(validationContext.IsValid);
        }