Пример #1
0
        public PropModelType ParsePropModel(IPropBagTemplate pbt)
        {
            if (pbt.ClassName == "PersonCollectionViewModel")
            {
                System.Diagnostics.Debug.WriteLine($"We are processing the {nameof(pbt.ClassName)} PropItem.");
            }

            //DeriveFromClassModeEnum deriveFrom = pbt.DeriveFromClassMode;
            //Type targetType = pbt.TargetType;

            //TypeInfoField wrapperTypeInfoField = GetWrapperTypeInfo(pbt);
            //Type targetTypeFromWTInfoField = GetTypeFromInfoField(wrapperTypeInfoField, PropKindEnum.Prop, targetType, out Type itemTypeDummy);

            PropModelType result = new PropModel
                                   (
                className: pbt.ClassName,
                namespaceName: pbt.OutPutNameSpace,
                deriveFrom: pbt.DeriveFromClassMode,
                targetType: pbt.TargetType,
                propFactory: null,
                propFactoryType: pbt.PropFactoryType,
                propModelCache: null,
                typeSafetyMode: pbt.TypeSafetyMode,
                deferMethodRefResolution: pbt.DeferMethodRefResolution,
                requireExplicitInitialValue: pbt.RequireExplicitInitialValue
                                   );

            // Add Namespaces
            int namespacesCount = pbt.Namespaces == null ? 0 : pbt.Namespaces.Count;

            for (int nsPtr = 0; nsPtr < namespacesCount; nsPtr++)
            {
                result.Namespaces.Add(pbt.Namespaces[nsPtr].Namespace);
            }

            DoWhenChangedHelper doWhenChangedHelper = new DoWhenChangedHelper();

            int propsCount = pbt.Props == null ? 0 : pbt.Props.Count;

            // Parse each Prop Item
            for (int propPtr = 0; propPtr < propsCount; propPtr++)
            {
                IPropTemplateItem pi = pbt.Props[propPtr];

                try
                {
                    IPropItemModel rpi = ProcessProp(pi, doWhenChangedHelper);
                    result.Add(rpi.PropertyName, rpi);
                }
                catch (Exception e)
                {
                    throw new InvalidOperationException($"Error: {e.Message} occured while parsing PropItem: {pi.PropertyName} for class: {pbt.ClassName}.", e);
                }
            }

            return(result);
        }
        public PropertyDescriptor[] BuildPropDescriptors(PropModelType pm /*, IPropFactory pf*/)
        {
            PropertyDescriptor[] descriptors = new PropertyDescriptor[pm.Count];

            List <IPropItemModel> propItems = pm.GetPropItems().ToList();

            for (int pdPtr = 0; pdPtr < propItems.Count; pdPtr++)
            {
                IPropItemModel pItem = propItems[pdPtr];

                PropItemPropertyDescriptor <IPropBag> propItemTypeDesc =
                    new PropItemPropertyDescriptor <IPropBag>(pItem.PropertyName, pItem.PropertyType, new Attribute[] { });

                descriptors[pdPtr] = propItemTypeDesc;
            }

            return(descriptors);
        }