public static void SetBinding <TSource, TTarget>(this DependencyObject targetObject, DependencyProperty targetProperty, object sourceObject, PaintDotNet.ObjectModel.PropertyPath sourcePath, PaintDotNet.ObjectModel.BindingMode mode, Func <TSource, TTarget> convertFn, Func <TTarget, TSource> convertBackFn)
        {
            Func <object, object> func;
            Func <object, object> func2;

            if (convertFn == null)
            {
                func = null;
            }
            else
            {
                func = source => convertFn((TSource)source);
            }
            if (convertBackFn == null)
            {
                func2 = null;
            }
            else
            {
                func2 = target => convertBackFn((TTarget)target);
            }
            targetObject.SetBinding(targetProperty, sourceObject, sourcePath, mode, func, func2);
        }
        public static void SetBinding(this DependencyObject targetObject, DependencyProperty targetProperty, object sourceObject, PaintDotNet.ObjectModel.PropertyPath sourcePath, PaintDotNet.ObjectModel.BindingMode mode, Func <object, object> convertFn, Func <object, object> convertBackFn)
        {
            DelegateValueConverter converter;

            if (convertFn == null)
            {
                if (convertBackFn != null)
                {
                    ExceptionUtil.ThrowArgumentException("convertFn", "if convertFn is null, then convertBackFn must also be null");
                }
                converter = null;
            }
            else
            {
                converter = new DelegateValueConverter(convertFn, convertBackFn);
            }
            Binding binding = new Binding {
                Source = sourceObject,
                Path   = sourcePath.WpfPropertyPath,
                Mode   = (System.Windows.Data.BindingMode)mode
            };

            if (converter != null)
            {
                binding.Converter = converter;
            }
            BindingOperations.SetBinding(targetObject, targetProperty, binding);
        }
 public static void SetBinding(this DependencyObject targetObject, DependencyProperty targetProperty, object sourceObject, PaintDotNet.ObjectModel.PropertyPath sourcePath, PaintDotNet.ObjectModel.BindingMode mode)
 {
     targetObject.SetBinding(targetProperty, sourceObject, sourcePath, mode, null, null);
 }
 public static void SetBinding <TSource, TTarget>(this DependencyObject targetObject, DependencyProperty targetProperty, object sourceObject, PaintDotNet.ObjectModel.PropertyPath sourcePath, PaintDotNet.ObjectModel.BindingMode mode, Func <TSource, TTarget> convertFn)
 {
     targetObject.SetBinding <TSource, TTarget>(targetProperty, sourceObject, sourcePath, mode, convertFn, null);
 }
        public static void SetMultiBinding(this DependencyObject targetObject, DependencyProperty targetProperty, object[] sourceObjects, PaintDotNet.ObjectModel.PropertyPath[] sourcePaths, PaintDotNet.ObjectModel.BindingMode mode, Func <object[], object> convertFn, Func <object, object[]> convertBackFn)
        {
            DelegateMultiValueConverter converter = new DelegateMultiValueConverter(convertFn, convertBackFn);
            MultiBinding binding = new MultiBinding();

            for (int i = 0; i < sourceObjects.Length; i++)
            {
                Binding item = new Binding {
                    Source = sourceObjects[i],
                    Path   = sourcePaths[i].WpfPropertyPath,
                    Mode   = (System.Windows.Data.BindingMode)mode
                };
                binding.Bindings.Add(item);
            }
            binding.Converter = converter;
            BindingOperations.SetBinding(targetObject, targetProperty, binding);
        }