/// <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));
            }
        }