// Complete public PropItemModel ( Type type, string name, PropStorageStrategyEnum storageStrategy, bool typeIsSolid, PropKindEnum propKind, ITypeInfoField propTypeInfoField, IPropInitialValueField initialValueField, object extraInfo, IPropComparerField comparer, Type itemType, IPropBinderField binderField, IMapperRequest mapperRequest, PropCreatorType propCreator ) { PropertyType = type; PropertyName = name; ExtraInfo = extraInfo; StorageStrategy = storageStrategy; TypeIsSolid = typeIsSolid; PropKind = propKind; PropTypeInfoField = _propTypeInfoField; InitialValueField = initialValueField; ComparerField = comparer; _itemType = itemType; _propBinderField = binderField; _mapperRequest = mapperRequest; _propCreator = propCreator; InitialValueCooked = null; }
private Type GetTypeFromInfoField(DRM.PropBagControlsWPF.TypeInfoField tif, PropKindEnum propKind, Type propertyType, out Type itemType) { itemType = null; switch (propKind) { case PropKindEnum.Prop: itemType = null; return(propertyType); case PropKindEnum.CollectionView: itemType = propertyType; Type pType = typeof(ListCollectionView); // typeof(ICollectionView); return(pType); case PropKindEnum.Enumerable_RO: goto case PropKindEnum.ObservableCollection; case PropKindEnum.Enumerable: goto case PropKindEnum.ObservableCollection; case PropKindEnum.EnumerableTyped_RO: goto case PropKindEnum.ObservableCollection; case PropKindEnum.EnumerableTyped: goto case PropKindEnum.ObservableCollection; case PropKindEnum.ObservableCollection_RO: goto case PropKindEnum.ObservableCollection; case PropKindEnum.ObservableCollection: return(GetTypeFromCollInfoField(tif, propertyType, out itemType)); case PropKindEnum.CollectionViewSource_RO: goto case PropKindEnum.CollectionViewSource; case PropKindEnum.CollectionViewSource: Type result = typeof(CollectionViewSource); itemType = propertyType; return(result); case PropKindEnum.DataTable_RO: goto case PropKindEnum.DataTable; case PropKindEnum.DataTable: itemType = null; return(typeof(DataTable)); default: throw new InvalidOperationException($"PropKind = {propKind} is not recognized or is not supported."); } }
public PBCollectionDSP_Provider(PropKindEnum propKind, IWatchAPropItemGen propItemWatcherGen) { _propKind = propKind; if (!(_propKind == PropKindEnum.ObservableCollection /* || _propKind == PropKindEnum.ObservableCollectionFB*/)) { throw new NotSupportedException($"This IProvideADataSourceProvider {nameof(PBCollectionDSP_Provider)} cannot create a DataSourceProvider for Prop Items with Kind = {_propKind}."); } _isReadOnly = false; _propItemWatcherGen = propItemWatcherGen; }
protected virtual IPropTemplate <T> GetPropTemplate <T> ( PropKindEnum propKindEnum, PropStorageStrategyEnum storageStrategy, Func <T, T, bool> comparer, bool comparerIsRefEquality, Func <string, T> getDefaultVal ) { // Supply a comparer, if one was not supplied by the caller. bool comparerIsDefault; if (comparer == null) { comparer = EqualityComparer <T> .Default.Equals; comparerIsDefault = true; } else { comparerIsDefault = false; } bool defaultValFuncIsDefault; // Use the Get Default Value function supplied or provided by this Prop Factory. if (getDefaultVal == null) { getDefaultVal = ValueConverter.GetDefaultValue <T>; defaultValFuncIsDefault = true; } else { defaultValFuncIsDefault = false; } IPropTemplate <T> propTemplateTyped = new PropTemplateTyped <T> ( propKindEnum, storageStrategy, this.GetType(), comparerIsDefault, comparerIsRefEquality, comparer, getDefaultVal, defaultValFuncIsDefault ); IPropTemplate <T> existingEntry = (IPropTemplate <T>)DelegateCacheProvider.PropTemplateCache.GetOrAdd(propTemplateTyped); return(existingEntry); }
private static void CheckPropKindSpecial(PropKindEnum propKind) { if (! ( propKind == PropKindEnum.CollectionView || propKind == PropKindEnum.CollectionViewSource || propKind == PropKindEnum.CollectionViewSource_RO || propKind == PropKindEnum.DataTable || propKind == PropKindEnum.DataTable_RO ) ) { throw new InvalidOperationException($"The PropKind: {propKind} is not supported."); } }
public PropTemplateTyped(PropKindEnum propKind, PropStorageStrategyEnum storageStrategy, Type propFactoryType, bool comparerIsDefault, bool comparerIsRefEquality, Func <T, T, bool> comparer, Func <string, T> defaultValFunc, bool defaultValFuncIsDefault) { PropKind = propKind; Type = typeof(T); StorageStrategy = storageStrategy; Attributes = new Attribute[] { }; ComparerIsDefault = comparerIsDefault; ComparerIsRefEquality = comparerIsRefEquality; Comparer = comparer; GetDefaultVal = defaultValFunc; PropFactoryType = propFactoryType; _hashCode = ComputetHashCode(); }
// Type, Name, StorageStrategy, Kinde and Initial Value -- With ItemType public PropItemModel(Type type, string name, PropStorageStrategyEnum storageStrategy, PropKindEnum propKind, IPropInitialValueField initialValueField, Type itemType) : this ( type : type, name : name, storageStrategy : storageStrategy, typeIsSolid : true, propKind : propKind, propTypeInfoField : null, initialValueField : initialValueField, extraInfo : null, comparer : null, itemType : itemType, binderField : null, mapperRequest : null, propCreator : null ) { }
private static void CheckPropKind(PropKindEnum propKind) { if (! ( propKind == PropKindEnum.CollectionView || propKind == PropKindEnum.CollectionViewSource || propKind == PropKindEnum.CollectionViewSource_RO || propKind == PropKindEnum.DataTable || propKind == PropKindEnum.DataTable_RO || propKind == PropKindEnum.Prop || propKind == PropKindEnum.ObservableCollection || propKind == PropKindEnum.EnumerableTyped || propKind == PropKindEnum.Enumerable || propKind == PropKindEnum.ObservableCollection_RO || propKind == PropKindEnum.EnumerableTyped_RO || propKind == PropKindEnum.Enumerable_RO ) ) { throw new InvalidOperationException($"The PropKind: {propKind} is not supported."); } }
public static bool IsReadOnly(this PropKindEnum propKind) { if (propKind == PropKindEnum.Prop) { return(false); } else if ( propKind == PropKindEnum.CollectionViewSource_RO || propKind == PropKindEnum.ObservableCollection_RO || propKind == PropKindEnum.EnumerableTyped_RO || propKind == PropKindEnum.Enumerable_RO ) { return(true); } else { CheckPropKind(propKind); return(false); } }
public static bool IsCollection(this PropKindEnum propKind) { if (propKind == PropKindEnum.Prop) { return(false); } else if ( propKind == PropKindEnum.ObservableCollection || propKind == PropKindEnum.EnumerableTyped || propKind == PropKindEnum.Enumerable || propKind == PropKindEnum.ObservableCollection_RO || propKind == PropKindEnum.EnumerableTyped_RO || propKind == PropKindEnum.Enumerable_RO ) { return(true); } else { CheckPropKindSpecial(propKind); return(false); } }
//public virtual IProp CreateGenFromString(Type typeOfThisProperty, // string value, bool useDefault, // PropNameType propertyName, object extraInfo, // PropStorageStrategyEnum storageStrategy, bool isTypeSolid, PropKindEnum propKind, // Delegate comparer, bool useRefEquality = false, Type itemType = null) //{ // MemConsumptionTracker mct = new MemConsumptionTracker(enabled: false); // if (propKind == PropKindEnum.Prop) // { // CreateScalarProp propCreator = GetPropCreator(typeOfThisProperty); // mct.MeasureAndReport("GetPropCreator", $"for {propertyName}"); // // TODO: This is where strings are parsed to create objects of type T. // // TODO: This needs more work, to say the least. // IProp prop = propCreator(this, haveValue: true, value: value, useDefault: useDefault, propertyName: propertyName, // extraInfo: extraInfo, storageStrategy: storageStrategy, isTypeSolid: isTypeSolid, // comparer: comparer, useRefEquality: useRefEquality, getDefaultValFunc: null); // mct.MeasureAndReport("Ran propCreator to get IProp", $"for {propertyName}"); // return prop; // } // else if (propKind.IsCollection()) // { // CreateCPropFromStringDelegate propCreator = GetCPropFromStringCreator(typeOfThisProperty, itemType); // mct.MeasureAndReport("GetCPropFromStringCreator", $"for {propertyName}"); // IProp prop = propCreator(this, value: value, useDefault: useDefault, propertyName: propertyName, // extraInfo: extraInfo, storageStrategy: storageStrategy, isTypeSolid: isTypeSolid, // comparer: comparer, useRefEquality: useRefEquality); // mct.MeasureAndReport("Ran GetCPropFromStringCreator to get IProp", $"for {propertyName}"); // return prop; // } // else // { // throw new InvalidOperationException($"PropKind = {propKind} is not recognized or is not supported."); // } //} public virtual IProp CreateGenWithNoValue(Type typeOfThisProperty, PropNameType propertyName, object extraInfo, PropStorageStrategyEnum storageStrategy, bool isTypeSolid, PropKindEnum propKind, Delegate comparer, bool useRefEquality = false, Type itemType = null) { MemConsumptionTracker mct = new MemConsumptionTracker(enabled: false); if (propKind == PropKindEnum.Prop) { CreateScalarProp propCreator = GetPropCreator(typeOfThisProperty); mct.MeasureAndReport("GetPropCreator", $"for {propertyName}"); IProp prop = propCreator(this, haveValue: false, value: null, useDefault: false, propertyName: propertyName, extraInfo: extraInfo, storageStrategy: storageStrategy, isTypeSolid: isTypeSolid, comparer: comparer, useRefEquality: useRefEquality, getDefaultValFunc: null); mct.MeasureAndReport("Ran propCreator to get IProp", $"for {propertyName}"); return(prop); } else if (propKind.IsCollection()) { CreateCPropWithNoValueDelegate propCreator = GetCPropWithNoValueCreator(typeOfThisProperty, itemType); IProp prop = propCreator(this, propertyName: propertyName, extraInfo: extraInfo, storageStrategy: storageStrategy, isTypeSolid: isTypeSolid, comparer: comparer, useRefEquality: useRefEquality); return(prop); } else { throw new InvalidOperationException($"PropKind = {propKind} is not recognized or is not supported."); } }