/// <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); } }
/// <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); } }
/// <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); }
private void UnregisterParent() { parent = null; }
private void RegisterParent(ObserverManager parent) { this.parent = parent; }