Exemplo n.º 1
0
        private bool OnSetLockedField <T>(string propertyName, ref ValueLocker <T> lockedField, T value, bool raiseOnlyIfNotEquals)
        {
            if (propertyName == null)
            {
                throw new ArgumentNullException("propertyName");
            }
            T oldValue = OnGetLockedField(ref lockedField, propertyName);

            if (
                raiseOnlyIfNotEquals
                &&
                (
                    (lockedField == null && value == null) ||
                    (lockedField != null && lockedField.ObjectLocked == null && value == null) ||
                    (lockedField != null && lockedField.ObjectLocked != null && lockedField.ObjectLocked.Equals(value))
                )
                )
            {
                return(false);
            }
            //if (!OnRaisePropertyChanging(propertyName, oldValue, value)) return false;
            if (lockedField == null)
            {
                lockedField = new ValueLocker <T>(value);
            }
            else
            {
                lockedField.WriteRef(value);
            }
            OnRaisePropertyChanged(propertyName, oldValue, value);
            return(true);
        }
Exemplo n.º 2
0
        private bool OnSetLockedValue <T>(T value, bool raiseOnlyIfNotEquals = true, [CallerMemberName] string propertyName = null)
        {
            if (propertyName == null)
            {
                throw new ArgumentNullException("propertyName");
            }
            ValueLocker <T> oldLockerValue;

            if (PropertiesDictionary.ContainsKey(GetPropertyKey(propertyName)))
            {
                oldLockerValue = GetLockerProperty <T>(propertyName: propertyName);
                //OnRaisePropertyRead(propertyName, oldLockerValue.ObjectLocked);
            }
            else
            {
                // oldLockerValue = new ValueLocker<T>((T)GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static).GetValue(this, null));
                oldLockerValue = new ValueLocker <T>((T)GetType().GetTypeInfo().GetAllProperties().Single(p => p.Name == propertyName).GetValue(this, null));
                PropertiesDictionary[GetPropertyKey(propertyName)] = oldLockerValue;
            }
            if (raiseOnlyIfNotEquals && ((oldLockerValue == null && value == null) || EqualityComparer <T> .Default.Equals(oldLockerValue.ObjectLocked, value)))
            {
                return(false);
            }
            T oldValue = oldLockerValue.ObjectLocked;

            //if (!OnRaisePropertyChanging(propertyName, oldValue, value)) return false;
            ((ValueLocker <T>)PropertiesDictionary[GetPropertyKey(propertyName)]).WriteRef(value);
            OnRaisePropertyChanged(propertyName, oldValue, value);
            return(true);
        }
Exemplo n.º 3
0
        private T OnGetLockedField <T>(ref ValueLocker <T> lockedField, [CallerMemberName] string propertyName = null)
        {
            if (propertyName == null)
            {
                throw new ArgumentNullException("propertyName");
            }
            T value = lockedField == null ? default(T) : lockedField.ObjectLocked;

            //T interceptedValue = OnRaisePropertyRead(propertyName, value);
            //if (EqualityComparer<T>.Default.Equals(value, interceptedValue)) return interceptedValue;
            //if (lockedField == null) lockedField = new ValueLocker<T>(interceptedValue);
            //else lockedField.WriteRef(interceptedValue);
            //return interceptedValue;
            return(value);
        }
Exemplo n.º 4
0
        private T OnGetLockedValue <T>(Func <T> defaultValueFunction = null, [CallerMemberName] string propertyName = null)
        {
            if (propertyName == null)
            {
                throw new ArgumentNullException("propertyName");
            }
            ValueLocker <T> locker = GetLockerProperty(defaultValueFunction, propertyName);
            T value = locker.ObjectLocked;

            //T interceptedValue = OnRaisePropertyRead(propertyName, value);
            //if (!EqualityComparer<T>.Default.Equals(value, interceptedValue))
            //    ((ValueLocker<T>)PropertiesDictionary[propertyName]).WriteRef(interceptedValue);
            //return interceptedValue;
            return(value);
        }
Exemplo n.º 5
0
        private ValueLocker <T> GetLockerProperty <T>(Func <T> defaultValueFunction = null, [CallerMemberName] string propertyName = null)
        {
            if (propertyName == null)
            {
                throw new ArgumentNullException("propertyName");
            }
            object objValue;

            if (PropertiesDictionary.TryGetValue(GetPropertyKey(propertyName), out objValue))
            {
                return((ValueLocker <T>)objValue);
            }
            T   defaultValue  = defaultValueFunction == null ? default(T) : defaultValueFunction();
            var defaultLocker = new ValueLocker <T>(defaultValue);

            PropertiesDictionary[GetPropertyKey(propertyName)] = defaultLocker;
            return(defaultLocker);
        }
Exemplo n.º 6
0
 protected string GetLockedField(ref ValueLocker <string> lockedField, [CallerMemberName] string propertyName = null)
 {
     return(OnGetLockedField(ref lockedField, propertyName));
 }
Exemplo n.º 7
0
 protected T GetLockedField <T>(ref ValueLocker <T> lockedField, [CallerMemberName] string propertyName = null) where T : struct
 {
     return(OnGetLockedField(ref lockedField, propertyName));
 }
Exemplo n.º 8
0
 protected bool SetLockedField(ref ValueLocker <string> lockedField, string value, bool raiseOnlyIfNotEquals = true, [CallerMemberName] String propertyName = null)
 {
     return(OnSetLockedField(propertyName, ref lockedField, value, raiseOnlyIfNotEquals));
 }
Exemplo n.º 9
0
 protected bool SetLockedField <T>(ref ValueLocker <T> lockedField, T value, bool raiseOnlyIfNotEquals = true, [CallerMemberName] String propertyName = null) where T : struct
 {
     return(OnSetLockedField(propertyName, ref lockedField, value, raiseOnlyIfNotEquals));
 }