示例#1
0
        private PropertyDescriptorCollection GetPropertiesWithMetadata(PropertyDescriptorCollection originalCollection)
        {
            if (AssociatedMetadataType == null)
            {
                return(originalCollection);
            }

            bool customDescriptorsCreated = false;
            List <PropertyDescriptor> tempPropertyDescriptors = new List <PropertyDescriptor>();

            foreach (PropertyDescriptor propDescriptor in originalCollection)
            {
                Attribute[]        newMetadata = TypeDescriptorCache.GetAssociatedMetadata(AssociatedMetadataType, propDescriptor.Name);
                PropertyDescriptor descriptor  = propDescriptor;
                if (newMetadata.Length > 0)
                {
                    // Create a metadata descriptor that wraps the property descriptor
                    descriptor = new MetadataPropertyDescriptorWrapper(propDescriptor, newMetadata);
                    customDescriptorsCreated = true;
                }

                tempPropertyDescriptors.Add(descriptor);
            }

            if (customDescriptorsCreated)
            {
                return(new PropertyDescriptorCollection(tempPropertyDescriptors.ToArray(), true));
            }
            return(originalCollection);
        }