Inheritance: Microsoft.Practices.Prism.ViewModel.NotificationObject, IDataErrorInfo
        private List<string> Validate(ValidatableViewModel vm)
        {
            if (vm == null)
            {
                throw new ArgumentNullException("vm");
            }

            var result = ValidateCore();
            result.AddRange(from item in _validationAttributeDictionary
                let value = item.Key.GetValue(vm, null)
                from validationItem in item.Value
                select validationItem.Validate(this, value)
                into error
                where !string.IsNullOrEmpty(error)
                select error);
            return result;
        }
        private List <string> Validate(ValidatableViewModel vm)
        {
            if (vm == null)
            {
                throw new ArgumentNullException("vm");
            }

            var result = ValidateCore();

            result.AddRange(from item in _validationAttributeDictionary
                            let value = item.Key.GetValue(vm, null)
                                        from validationItem in item.Value
                                        select validationItem.Validate(this, value)
                                        into error
                                        where !string.IsNullOrEmpty(error)
                                        select error);
            return(result);
        }
        private List <string> Validate(ValidatableViewModel vm, string propertyName)
        {
            if (vm == null)
            {
                throw new ArgumentNullException("vm");
            }

            var result = new List <string>();

            List <IValidationItem> validators;
            var propertyInfo = GetType().GetProperty(propertyName);

            if (_validationAttributeDictionary.TryGetValue(propertyInfo, out validators))
            {
                var value = propertyInfo.GetValue(vm, null);
                result.AddRange(
                    from validationItem in validators
                    let error = validationItem.Validate(this, value)
                                where !string.IsNullOrEmpty(error)
                                select error);
            }
            RaisePropertyChanged(() => IsValid);
            return(result);
        }
        private List<string> Validate(ValidatableViewModel vm, string propertyName)
        {
            if (vm == null)
            {
                throw new ArgumentNullException("vm");
            }

            var result = new List<string>();

            List<IValidationItem> validators;
            var propertyInfo = GetType().GetProperty(propertyName);
            if (_validationAttributeDictionary.TryGetValue(propertyInfo, out validators))
            {
                var value = propertyInfo.GetValue(vm, null);
                result.AddRange(
                    from validationItem in validators
                    let error = validationItem.Validate(this, value)
                    where !string.IsNullOrEmpty(error)
                    select error);
            }
            RaisePropertyChanged(() => IsValid);
            return result;
        }