/// <summary>
        /// Gets the category for the specified property.
        /// </summary>
        /// <param name="pd">The property descriptor.</param>
        /// <returns>The category.</returns>
        public static string GetCategory(this System.ComponentModel.PropertyDescriptor pd)
        {
            var a = pd.GetFirstAttributeOrDefault <DataAnnotations.CategoryAttribute>();

            if (a != null)
            {
                return(a.Category);
            }

            return(pd.Category);
        }
        /// <summary>
        /// Gets the display name for the specified property.
        /// </summary>
        /// <param name="pd">The property descriptor.</param>
        /// <returns>The display name.</returns>
        public static string GetDisplayName(this System.ComponentModel.PropertyDescriptor pd)
        {
            var a = pd.GetFirstAttributeOrDefault <DataAnnotations.DisplayNameAttribute>();

            if (a != null)
            {
                return(a.DisplayName);
            }

            return(pd.DisplayName);
        }
        /// <summary>
        /// Determines whether the property is read-only.
        /// </summary>
        /// <param name="pd">The property descriptor.</param>
        /// <returns><c>true</c> if the property is read-only; otherwise, <c>false</c>.</returns>
        public static bool IsReadOnly(this System.ComponentModel.PropertyDescriptor pd)
        {
            var a = pd.GetFirstAttributeOrDefault <DataAnnotations.ReadOnlyAttribute>();

            if (a != null)
            {
                return(a.IsReadOnly);
            }

            return(pd.IsReadOnly);
        }