/// <summary>
        /// Must be called whenever a node value is changed externally, for example when a property node's backing field changes its value.
        /// </summary>
        public void WasChanged(object source)
        {
            if (!Enabled)
            {
                return;
            }

            Chain <IListener> notifyChain = null;

            ReactiveManager.TryGetNode(source)?.NotifyChildren(ref notifyChain);
            while (notifyChain != null)
            {
                try
                {
                    notifyChain.Value.Notify();
                }
                catch (Exception e)
                {
                    HandleNotifyException(source, e, notifyChain);
                }
                notifyChain = notifyChain.Next;
            }
            (source as IListener)?.Notify(); //TODO maybe remove this?
        }