コード例 #1
0
        // returns the AProperty value for the passed object.
        public PropertyType GetProperty(ObjectType obj)
        {
            APropertyValueWrapper <ObjectType, PropertyType> valueWrapper =
                GetValueWrapper(obj);

            return(GetCurrentValueFromWrapper(valueWrapper));
        }
コード例 #2
0
        PropertyType GetCurrentValueFromWrapper(APropertyValueWrapper <ObjectType, PropertyType> valueWrapper)
        {
            if (valueWrapper == null)
            {
                return(_defaultValue);
            }

            return(valueWrapper.APropertyValue);
        }
コード例 #3
0
        // removes the individual change handler
        // from a passed object.
        public void RemoveOnPropertyChangedHandler
        (
            ObjectType obj,
            OnPropertyChangedDelegate <ObjectType, PropertyType> propChangedHandler
        )
        {
            APropertyValueWrapper <ObjectType, PropertyType> valueWrapper =
                GetValueWrapper(obj, true);

            valueWrapper.OnPropertyChangedEvent -= propChangedHandler;
        }
コード例 #4
0
        // if shouldRemove flag is true, newPropertyValue should be default
        void SetOrRemoveProperty(ObjectType obj, PropertyType newPropertyValue, bool shouldRemove = false)
        {
            APropertyValueWrapper <ObjectType, PropertyType> valueWrapper =
                GetValueWrapper(obj);

            PropertyType oldPropertyValue = GetCurrentValueFromWrapper(valueWrapper);

            if (oldPropertyValue.ObjEquals(newPropertyValue))
            {
                // do not do or any event firing if the property did not change
                // this is important to prevent circlular updates
                // in case of the bindings.
                return;
            }

            // check the global BeforePropertyChanged Event
            if (BeforePropertyChangedFn != null)
            {
                // if returned false, do not proceed
                if (!BeforePropertyChangedFn(obj, oldPropertyValue, newPropertyValue))
                {
                    return;
                }
            }

            if (!shouldRemove)
            {
                if (valueWrapper == null)
                {
                    valueWrapper = new APropertyValueWrapper <ObjectType, PropertyType>
                    {
                        Obj = obj
                    };
                    _objectToPropValueMap.Add(obj, valueWrapper);
                }

                valueWrapper.APropertyValue = newPropertyValue;
            }
            else
            {
                _objectToPropValueMap.Remove(obj);
            }

            valueWrapper.FireOnPropertyChangedEvent(oldPropertyValue);

            if (shouldRemove)
            {
                valueWrapper.ClearOnPropertyChangedEvent();
            }

            OnPropertyChangedFn?.Invoke(obj, oldPropertyValue, newPropertyValue);
        }
コード例 #5
0
        // clears AProperty from the passed object.
        public void ClearAProperty(ObjectType obj)
        {
            APropertyValueWrapper <ObjectType, PropertyType> valueWrapper =
                GetValueWrapper(obj);

            if (valueWrapper == null)
            {
                return;
            }

            SetOrRemoveProperty(obj, _defaultValue, true);
            //_objectToPropValueMap.Remove(obj);
        }
コード例 #6
0
        // adds an individual property change handler
        // on the passed object. (other object won't get affected)
        public void AddOnPropertyChangedHandler
        (
            ObjectType obj,
            OnPropertyChangedDelegate <ObjectType, PropertyType> propChangedHandler
        )
        {
            if (propChangedHandler == null)
            {
                return;
            }

            APropertyValueWrapper <ObjectType, PropertyType> valueWrapper =
                GetValueWrapper(obj, true);

            valueWrapper.OnPropertyChangedEvent += propChangedHandler;
        }
コード例 #7
0
        // given an object returns the ValueWrapper corresponding to the AProperty value
        // of this object. If it is null and createIfDoesNotExist flag set to true,
        // it will create the ValueWrapper with default value.
        APropertyValueWrapper <ObjectType, PropertyType> GetValueWrapper(ObjectType obj, bool createIfDoesNotExist = false)
        {
            APropertyValueWrapper <ObjectType, PropertyType> valueWrapper = null;

            if (!_objectToPropValueMap.TryGetValue(obj, out valueWrapper))
            {
                if (createIfDoesNotExist)
                {
                    if (valueWrapper == null)
                    {
                        valueWrapper = new APropertyValueWrapper <ObjectType, PropertyType>
                        {
                            Obj            = obj,
                            APropertyValue = _defaultValue
                        };

                        _objectToPropValueMap.Add(obj, valueWrapper);
                    }
                }
            }

            return(valueWrapper);
        }