Ejemplo n.º 1
0
 protected override void NotifyLayoutChanged(PropertyChange change)
 {
     if (IsActive)
     {
         base.NotifyLayoutChanged(change);
     }
 }
Ejemplo n.º 2
0
 protected bool SetPropertyValue <T>(ref T property, T value, [CallerMemberName] string propertyName = null)
 {
     if (!EqualityComparer <T> .Default.Equals(property, value))
     {
         var propChange = new PropertyChange(this, propertyName, property, value);
         property = value;
         NotifyLayoutChanged(propChange);
         return(true);
     }
     return(false);
 }
Ejemplo n.º 3
0
 protected bool SetFieldValue <T>(ref T[] field, int index, T value, string fieldName)
 {
     if (!EqualityComparer <T> .Default.Equals(field[index], value))
     {
         var propChange = new PropertyChange(this, fieldName, index, field[index], value, true);
         field[index] = value;
         NotifyLayoutChanged(propChange);
         return(true);
     }
     return(false);
 }
Ejemplo n.º 4
0
 protected virtual void NotifyLayoutChanged(PropertyChange change)
 {
     Layout?.NotifyLayoutChanged(change);
 }
Ejemplo n.º 5
0
        //TODO: move code into each Change type class and clean-up the structure
        private void ApplyPropertyChange(PropertyChange propChange, bool setNewValue)
        {
            var ownerType   = propChange.Component?.GetType() ?? GetType();
            var ownerObject = (object)propChange.Component ?? this;
            var valueToSet  = setNewValue ? propChange.NewValue : propChange.OldValue;

            if (propChange.IsField)
            {
                var fi = ownerType.GetField(propChange.Property,
                                            BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

                if (propChange.Index.HasValue)
                {
                    var arrayValue = (IList)fi.GetValue(ownerObject);
                    arrayValue[propChange.Index.Value] = valueToSet;
                }
                else
                {
                    fi.SetValue(ownerObject, valueToSet);
                }

                if (ownerObject is LayoutComponent component)
                {
                    component.OnSetFieldValue(propChange.Name, fi.GetValue(ownerObject), propChange.Index, valueToSet);
                }

                NotifyLayoutChanged(new PropertyChange(propChange.Component, propChange.Property,
                                                       setNewValue ? propChange.OldValue : propChange.NewValue,
                                                       setNewValue ? propChange.NewValue : propChange.OldValue,
                                                       true));
            }
            else
            {
                PropertyInfo pi            = null;
                bool         isSubProperty = false;

                if (propChange.Property.Contains("."))
                {
                    string[] propNames = propChange.Property.Split('.');
                    pi            = ownerType.GetProperty(propNames[0]);
                    ownerObject   = pi.GetValue(ownerObject);
                    ownerType     = ownerObject.GetType();
                    pi            = ownerType.GetProperty(propNames[1]);
                    isSubProperty = true;
                }
                else
                {
                    pi = ownerType.GetProperty(propChange.Property);
                }

                pi.SetValue(ownerObject, valueToSet);

                if (isSubProperty)
                {
                    NotifyLayoutChanged(new PropertyChange(propChange.Component,
                                                           propChange.Property, propChange.Index,
                                                           propChange.NewValue, propChange.OldValue,
                                                           propChange.IsField));
                }
            }
        }