Ejemplo n.º 1
0
        /// <summary>
        /// Register a child <see cref="ObserverManager"/>. "ChangeObserved" events fired by children will bubble up and get re-fired by this manager.
        /// <para></para>
        /// <see cref="IsEnabled"/> is set to false, the child is already added or is null this will have no effect!
        /// </summary>
        /// <param name="child">The child to add and observe</param>
        public void RegisterChild(ObserverManager child)
        {
            if (child == null || !IsEnabled)
            {
                return;
            }

            if (!children.Any(x => x.guid == child.guid))
            {
                children.Add(child);
                child.ChangeObserved += Observer_ChangeObserved;
                child.RegisterParent(this);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Unregister a child <see cref="ObserverManager"/> if registered.
        /// <para></para>
        /// If the child is null or isn't registered this will have no effect!
        /// </summary>
        /// <param name="child">The child to remove</param>
        public void UnregisterChild(ObserverManager child)
        {
            if (child == null)
            {
                return;
            }

            int index = children.FindIndex(x => x.guid == child.guid);

            if (index > -1)
            {
                child.UnregisterParent();
                child.ChangeObserved -= Observer_ChangeObserved;
                children.RemoveAt(index);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Compares two <see cref="ObserverManager"/> and returns if they match.
        /// </summary>
        /// <param name="changeManager">The manager to compare this to</param>
        /// <returns>Returns true if both <see cref="ObserverManager"/> match, otherwise false</returns>
        public bool Compare(ObserverManager changeManager)
        {
            foreach (var observer in ChangeObservers)
            {
                var targetObserver = changeManager.ChangeObservers.FirstOrDefault(x => x.PropertyName == observer.PropertyName);
                if (targetObserver == null ||
                    observer.GetOriginalValue() == null && targetObserver.GetOriginalValue() == null ||
                    (observer.GetOriginalValue() == null && targetObserver.GetOriginalValue() != null) ||
                    (observer.GetOriginalValue() != null && targetObserver.GetOriginalValue() == null) ||
                    !observer.GetOriginalValue().Equals(targetObserver.GetOriginalValue()))
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 4
0
 private void UnregisterParent()
 {
     parent = null;
 }
Ejemplo n.º 5
0
 private void RegisterParent(ObserverManager parent)
 {
     this.parent = parent;
 }