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