private void SetupBinding(object source)
        {
            //sanity check
            if (source == null)
            {
                return;
            }

            var boundObject = BindExtension.GetObjectFromPath(source, this.Path.Path);

            if (boundObject == null)
            {
                return;
            }

            //set default BindingMode
            if (this.Mode == BindingMode.Default)
            {
                if (_bindingProperty.GetMetadata(_bindingTarget) is FrameworkPropertyMetadata metadata && metadata.BindsTwoWayByDefault)
                {
                    this.Mode = BindingMode.TwoWay;
                }
                else
                {
                    this.Mode = BindingMode.OneWay;
                }
            }