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