/// <summary>
        /// Creates an array of property descriptors that are associated with the adapted DomNode's
        /// DomNodeType. No duplicates will be in the array (based on the property descriptor's Name
        /// property). </summary>
        /// <returns></returns>
        protected virtual System.ComponentModel.PropertyDescriptor[] GetPropertyDescriptors()
        {
            HashSet <string> names = new HashSet <string>();
            List <System.ComponentModel.PropertyDescriptor> result = new List <System.ComponentModel.PropertyDescriptor>();

            DomNodeType nodeType = DomNode.Type;

            while (nodeType != null)
            {
                PropertyDescriptorCollection propertyDescriptors = nodeType.GetTag <PropertyDescriptorCollection>();
                if (propertyDescriptors != null)
                {
                    foreach (System.ComponentModel.PropertyDescriptor propertyDescriptor in propertyDescriptors)
                    {
                        // filter out duplicate names, so derived type data overrides base type data
                        if (!names.Contains(propertyDescriptor.Name))
                        {
                            names.Add(propertyDescriptor.Name);
                            result.Add(propertyDescriptor);
                        }
                    }
                }
                nodeType = nodeType.BaseType;
            }

            return(result.ToArray());
        }
예제 #2
0
        /// <summary>
        /// Creates an array of property descriptors that are associated with the adapted DomNode's
        /// DomNodeType. No duplicates are in the array (based on the property descriptor's Name
        /// property).</summary>
        /// <returns>Array of property descriptors</returns>
        protected virtual System.ComponentModel.PropertyDescriptor[] GetPropertyDescriptors()
        {
            HashSet <string> names = new HashSet <string>();
            List <System.ComponentModel.PropertyDescriptor> result = new List <System.ComponentModel.PropertyDescriptor>();

            DomNodeType nodeType = DomNode.Type;

            while (nodeType != null)
            {
                PropertyDescriptorCollection propertyDescriptors = nodeType.GetTag <PropertyDescriptorCollection>();
                if (propertyDescriptors != null)
                {
                    foreach (System.ComponentModel.PropertyDescriptor propertyDescriptor in propertyDescriptors)
                    {
                        // Use combination of category and name, to allow having properties with the
                        // same display name under different categories.
                        string fullName = string.Format("{0}_{1}", propertyDescriptor.Category, propertyDescriptor.Name);

                        // Filter out duplicate names, so derived type data overrides base type data)
                        if (!names.Contains(fullName))
                        {
                            names.Add(fullName);
                            result.Add(propertyDescriptor);
                        }
                    }
                }
                nodeType = nodeType.BaseType;
            }

            return(result.ToArray());
        }