static DataBindOption GetOption(Type type, PropertyInfo property)
        {
            if (property.GetCustomAttributes(typeof(DataBindFieldAttribute), true).Length == 0)
            {
                return(null);
            }

            if (!property.CanRead)
            {
                return(null);
            }

            var option = new DataBindOption()
            {
                Namespace      = type.Namespace,
                ClassName      = type.FullName,
                ShortClassName = type.Name,
                FieldName      = property.Name,
                FieldType      = Utilites.GetFriendlyTypeName(property.PropertyType),
                CanRead        = property.CanRead,
                CanWrite       = property.CanWrite,
                Events         = GetEvents(type, property.Name),
            };

            return(option);
        }
        /// <summary>
        /// Create support scripts for the specified type.
        /// </summary>
        /// <param name="type">Type.</param>
        /// <param name="path">Path to save scripts.</param>
        public static void Run(Type type, string path)
        {
            var options = DataBindOption.GetOptions(type);

            foreach (var option in options)
            {
                var gen = new DataBindGenerator(option, path);
                gen.Generate();
            }
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="option">Data.</param>
        /// <param name="path">Path to save files.</param>
        public DataBindGenerator(DataBindOption option, string path)
        {
            Option   = option;
            SavePath = path;

            foreach (var ev in Option.Events.Keys)
            {
                Events.Add(new DataBindEvents()
                {
                    ClassName = Option.ShortClassName,
                    EventName = ev,
                    Arguments = Option.Events[ev],
                });
            }
        }
        static DataBindOption GetOption(Type type, FieldInfo field)
        {
            if (field.GetCustomAttributes(typeof(DataBindFieldAttribute), true).Length == 0)
            {
                return(null);
            }

            var option = new DataBindOption()
            {
                Namespace      = type.Namespace,
                ClassName      = type.FullName,
                ShortClassName = type.Name,
                FieldName      = field.Name,
                FieldType      = Utilites.GetFriendlyTypeName(field.FieldType),
                Events         = GetEvents(type, field.Name),
            };

            return(option);
        }
        /// <summary>
        /// Check is Data Bind support can be added to the specified type.
        /// </summary>
        /// <param name="type">Type.</param>
        /// <returns>true if support can be added; otherwise false.</returns>
        public static bool IsValidType(Type type)
        {
            var options = DataBindOption.GetOptions(type);

            return(options.Count > 0);
        }