public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { //Construct properties list using visibility attributes List <PropertyDescriptor> lstProperties = new List <PropertyDescriptor>(); PropertyDescriptorCollection properties = base.GetProperties(context, value, attributes); foreach (PropertyDescriptor property in properties) { VisibilityAttribute visiblityAttribute = property.Attributes[typeof(VisibilityAttribute)] as VisibilityAttribute; if (visiblityAttribute == null) { lstProperties.Add(property); } else { if (visiblityAttribute.CheckCondition(value)) { lstProperties.Add(property); } } } return(new PropertyDescriptorCollection(lstProperties.ToArray())); }