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