/// <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()); }
/// <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()); }