public static void Refresh <TSourceValue, TTargetValue>(
            BindingMode bindingMode,
            ITwoWayBindingControl <TSourceValue, TTargetValue> bindingControl)
        {
            switch (bindingMode)
            {
#if WPF
            case BindingMode.OneWayToSource:
                bindingControl.UpdateSourceValue();
                break;
#endif
            default:
                bindingControl.UpdateTargetValue();
                break;
            }
        }
        public static void UpdateSourceValue <TRoot, TSource, TSourceValue, TTarget, TTargetValue>(
            ITwoWayBindingControl <TSourceValue, TTargetValue> bindingControl,
            ref DataBindingState <TRoot, TSource, TSourceValue, TTarget, TTargetValue> dataBindingState,
            Action <TSource, TSourceValue> setSourceValue)
            where TTarget : DependencyObject
        {
            if (dataBindingState.IsUpdating)
            {
                return;
            }

            var source = dataBindingState.BindingContext.Source;

            if (source != null)
            {
                var target = dataBindingState.Target;
                if (target != null)
                {
                    var targetValue = dataBindingState.GetTargetValue(target);
                    var sourceValue = dataBindingState.ConversionParameters.ValueConverter != null
                        ? dataBindingState.ConversionParameters.ValueConverter.ConvertBack(
                        targetValue,
                        typeof(TSourceValue),
                        dataBindingState.ConversionParameters.ConverterParameter,
#if WINDOWS_UWP
                        (string)target.GetValue(FrameworkElement.LanguageProperty))
#else
                        ((XmlLanguage)target.GetValue(FrameworkElement.LanguageProperty)).GetSpecificCulture())
#endif
                        : bindingControl.GetSourceValue(targetValue);

                    /*if (!Equals(sourceValue, dataBindingState.CurrentSourceValue))
                     * {*/
                    dataBindingState.IsUpdating = true;
                    //// dataBindingState.CurrentSourceValue = sourceValue;
                    setSourceValue(source, sourceValue);
                    dataBindingState.IsUpdating = false;
                    //// }
                }
            }

            dataBindingState.CurrentSource = source;
        }