public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget valueProvider)
            {
                _bindingTarget   = valueProvider.TargetObject as DependencyObject;
                _bindingProperty = valueProvider.TargetProperty as DependencyProperty;

                //DataContext, TODO other sources
                var dataContextSourceElement = BindExtension.FindDataContextSource(_bindingTarget);
                dataContextSourceElement.DataContextChanged += this.DataContextSource_DataContextChanged;

                this.SetupBinding(dataContextSourceElement.DataContext);
            }

            //return default
            return(_bindingProperty.DefaultMetadata.DefaultValue);
        }