/// <summary> /// Constructor. /// </summary> /// <param name="element">The element whose Parent property should be listened to.</param> /// <param name="onParentChanged">The action that will be performed upon change events.</param> public ParentChangedNotifier(FrameworkElement element, Action onParentChanged) { this.element = new WeakReference(element); if (onParentChanged != null) { if (!OnParentChangedList.ContainsKey(this.element)) { var foundOne = false; foreach (var key in OnParentChangedList.Keys) { if (ReferenceEquals(key.Target, element)) { this.element = key; foundOne = true; break; } } if (!foundOne) { OnParentChangedList.Add(this.element, new List <Action>()); } } OnParentChangedList[this.element].Add(onParentChanged); } if (element.CheckAccess()) { SetBinding(); } else { element.Dispatcher.Invoke(new Action(SetBinding)); } }