public virtual IEnumerable <PropertyAndField <TModel> > GetPropertyInfoes
            (ARBaseForm Model, BindingFlags bindFlags, PropertyFilterDelegate filter)
        {
            if (Model == null)
            {
                throw new ArgumentNullException("Model");
            }
            Type ModelType  = typeof(TModel);
            var  properties = ModelType.GetProperties(bindFlags);
            List <PropertyAndField <TModel> > list = new List <PropertyAndField <TModel> >();

            foreach (var p in properties)
            {
                if (filter != null)
                {
                    if (!filter(Model, p))
                    {
                        continue;
                    }
                }
                PropertyAndField <TModel> pf = new PropertyAndField <TModel>();
                pf.DatabaseId   = GetDatabaseIdFromPropertyInfo(p);
                pf.DatabaseName = GetDatabaseNameFromPropertyInfo(p);
                pf.DatabaseType = GetDataTypeFromPropertyInfo(p);
                pf.AccessLevel  = GetAccessLevelFromPropertyInfo(p);
                pf.Property     = p;
                //pf.Getter
                //pf.Setter
                list.Add(pf);
            }

            return(list);
        }
Beispiel #2
0
        public void SetEntry(T entry, PropertyFilterDelegate filter)
        {
            if (entry == null)
            {
                throw new ArgumentNullException("entry");
            }
            ModelMeteData <T> meta = new ModelMeteData <T>();

            meta.FormName = _metaProvider.GetFormNameFromModelType();
            var entryIdProp = _metaProvider.GetEntryIdPropertyInfo();

            if (entryIdProp == null)
            {
                throw new CustomAttributeFormatException("Can not find EntryId's PropertyInfo.");
            }

            meta.EntryId = (string)entryIdProp.GetValue(entry);
            meta.Model   = entry;

            var props = _metaProvider.GetPropertyInfoes(entry as ARBaseForm,
                                                        BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance,
                                                        filter
                                                        );

            meta.Properties = new List <PropertyAndField <T> >();

            foreach (var p in props)
            {
                if ((p.AccessLevel & ModelBinderAccessLevel.OnlyUnBind) == ModelBinderAccessLevel.OnlyUnBind)
                {
                    meta.Properties.Add(p);
                }
            }

            SetEntry(meta);
        }