public SuggestedValuesBindableProperty(Property property)
            : base(property)
        {
            Guard.ArgumentNotNull(property, "property");

            this.property = property;
            this.property.PropertyChanged += PropertyPropertyChanged;
        }
        protected override void Act()
        {
            overridenWrapTypeProperty = base.OverridesProperty.ChildProperties.Where(x => x.PropertyName == "WrapExceptionTypeName").FirstOrDefault();

            overridenWrapTypePropertyChangedListener = new PropertyChangedListener(overridenWrapTypeProperty.BindableProperty);

            OverridesProperty.Value = OverridesProperty.Converter.ConvertFromString(OverridesProperty, "Override Properties");
            
        }
        protected override void ValidateCore(Property property, string value, IList<ValidationResult> errors)
        {
            Initialize(property, errors);

            if(string.IsNullOrEmpty(value)) return;
            
            if (ResolveTypeName(value) == null)
            {
                ReportWarning(DesignResources.CouldNotResolveTypeName, value);
            }
        }
        /// <summary>
        /// Validates whether <paramref name="fileName"/> is an existing file.
        /// </summary>
        /// <param name="instance">The <see cref="Property"/> instance that declares <paramref name="fileName"/> as a value.</param>
        /// <param name="fileName">A rooted and valid file path.</param>
        /// <param name="errors">The collection to add any results that occur during the validation.</param>	
        protected override void InnerValidateCore(Property instance, string fileName, IList<ValidationResult> errors)
        {
            if (!File.Exists(fileName))
            {
                errors.Add(new PropertyValidationResult(instance,
                                               string.Format(CultureInfo.CurrentCulture,
                                                             Resources.ValidationFilePathNotFound,
                                                             fileName), errorsAsWarnings));
            }

        }
        /// <summary>
        /// Validates whether <paramref name="fileName"/> is a file that can be written to.
        /// </summary>
        /// <param name="instance">The <see cref="Property"/> instance that declares <paramref name="fileName"/> as a value.</param>
        /// <param name="fileName">A rooted and valid file path</param>
        /// <param name="errors">The collection to add any results that occur during the validation.</param>	
        protected override void InnerValidateCore(Property instance, string fileName, IList<ValidationResult> errors)
        {
            if (IsUnc(fileName)) return;
            if (!File.Exists(fileName)) return;

            var fileAttributes = File.GetAttributes(fileName);
            if ((fileAttributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
            {
                errors.Add(
                    new PropertyValidationResult(
                        instance,
                        string.Format(
                            CultureInfo.CurrentCulture,
                            Resources.ValidationFileNotWritable, fileName),
                        false
                        ));
            }
        }
 /// <summary>
 /// When implemented in a derived class, validates <paramref name="value"/> as part of the Property <paramref name="property"/>.
 /// </summary>
 /// <param name="property">The Property that declares the <paramref name="value"/>.</param>
 /// <param name="value">Value to validate</param>
 /// <param name="results">The collection to wich any results that occur during the validation can be added.</param>		
 protected abstract void ValidateCore(Property property, string value, IList<ValidationResult> results);
        protected override void Arrange()
        {
            base.Arrange();
            requiredReferenceingProperty = this.SectionViewModel.Property("RequiredReferenceItem");

            requiredReferenceingProperty.Value = "FirstItem";
            propertyChangeListener = new PropertyChangedListener(requiredReferenceingProperty);
        }
 /// <summary>
 /// Creates a new instance of <see cref="SuggestedValuesBindablePropertyConverter"/>.
 /// </summary>
 /// <param name="property">The <see cref="Property"/> this converter should be created for.</param>
 public SuggestedValuesBindablePropertyConverter(Property property)
     : base(property)
 {
     this.property = property;
 }