private void SetDelegateObserverBaseValue()
        {
            object baseValue = baseObserver.Value;

            if (ObservableValue.IsNullOrUnset(baseValue) || baseObserverValueType == baseValue.GetType())
            {
                if (delegateObserver != null)
                {
                    delegateObserver.SetBaseValue(baseValue);
                }

                return;
            }

            baseObserverValueType = baseValue.GetType();

            if (delegateObserver is IDisposable)
            {
                ((IDisposable)delegateObserver).Dispose();
            }

            delegateObserver = propertyPathElement.CreatePropertyObserver(baseObserverValueType);

            if (delegateObserver != null)
            {
                ValueType = delegateObserver.ValueType;
                delegateObserver.SetBaseValue(baseValue);
                delegateObserver.ValueChanged += (sender, e) => observableValue.Value = delegateObserver.Value;
                observableValue.Value          = delegateObserver.Value;
            }
            else
            {
                ValueType             = null;
                observableValue.Value = ObservableValue.UnsetValue;
            }
        }