/// <summary>
        /// Creates a <see cref="WizardProperty"/> based on a data structure.
        /// </summary>
        /// <param name="wizardData">The attributed structure to use for storing wizard data.  See <see cref="WizardProperty"/>.</param>
        /// <param name="propertyName">The name of the property that must be on <paramref name="wizardData"/></param>
        /// <returns>An initialized wizard property based on <paramref name="wizardData"/>.</returns>
        protected WizardProperty AddReflectedProperty(object wizardData, string propertyName)
        {
            var property = new WizardProperty(serviceProvider,
                                              wizardData,
                                              TypeDescriptor.GetProperties(wizardData)[propertyName],
                                              validatorFactory,
                                              elementLookup
                                              );


            PropertyList.Add(property);
            return(property);
        }
        /// <summary>
        /// Creates an instance of <see cref="AssociatedWizardProperty"/>.
        /// </summary>
        /// <param name="serviceProvider"></param>
        /// <param name="component"></param>
        /// <param name="declaringProperty"></param>
        /// <param name="validatorResolver"></param>
        /// <param name="elementLookup"></param>
        /// <param name="associatedProperty"></param>
        /// <param name="additionalAttributes"></param>
        public AssociatedWizardProperty(
            IServiceProvider serviceProvider,
            object component,
            PropertyDescriptor declaringProperty,
            IResolver <Validator> validatorResolver,
            ElementLookup elementLookup,
            WizardProperty associatedProperty,
            params Attribute[] additionalAttributes)
            : base(serviceProvider, component, declaringProperty, validatorResolver, elementLookup, additionalAttributes)
        {
            this.associatedProperty = associatedProperty;

            associatedProperty.PropertyChanged += AssociatedPropertyChangedHandler;
        }
        /// <summary>
        /// Creates an instance of <see cref="AssociatedWizardProperty"/>.
        /// </summary>
        /// <param name="serviceProvider"></param>
        /// <param name="component"></param>
        /// <param name="declaringProperty"></param>
        /// <param name="validatorResolver"></param>
        /// <param name="elementLookup"></param>
        /// <param name="associatedProperty"></param>
        /// <param name="additionalAttributes"></param>
        public AssociatedWizardProperty(
            IServiceProvider serviceProvider, 
            object component, 
            PropertyDescriptor declaringProperty, 
            IResolver<Validator> validatorResolver, 
            ElementLookup elementLookup,
            WizardProperty associatedProperty,
            params Attribute[] additionalAttributes) 
            : base(serviceProvider, component, declaringProperty, validatorResolver, elementLookup, additionalAttributes)
        {
            this.associatedProperty = associatedProperty;

            associatedProperty.PropertyChanged += AssociatedPropertyChangedHandler;
        }