Esempio n. 1
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (MultiBinding != null)
            {
                if (Bindings.Any())
                    throw new ArgumentException($"{nameof(Bindings)} should be an empty");
                if (Converter != null)
                    throw new ArgumentException($"{nameof(Converter)} should be a null");
            }
            else
            {
                if (!Bindings.Any())
                    throw new ArgumentNullException(nameof(Bindings));
                if (Converter == null)
                    throw new ArgumentNullException(nameof(Converter));
            }

            var target = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));
            if (target.TargetObject.GetType().FullName == "System.Windows.SharedDp")
                return this;

            if (MultiBinding != null)
            {
                Converter = MultiBinding.Converter;
                ConverterParameter = MultiBinding.ConverterParameter;
                ConverterCulture = MultiBinding.ConverterCulture;
                foreach (var bindingBase in MultiBinding.Bindings)
                    Bindings.Add(bindingBase);
            }

            if (target.TargetObject is NestedBindingCollection)
            {
                var binding = new Binding
                {
                    Source = this
                };
                return binding;
            }

            var multiBinding = new MultiBinding
            {
                Mode = BindingMode.OneWay
            };
            var tree = GetNestedBindingsTree(this, multiBinding);
            var converter = new NestedBindingConverter(tree);
            multiBinding.Converter = converter;

            return multiBinding.ProvideValue(serviceProvider);
        }
Esempio n. 2
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (MultiBinding != null)
            {
                if (Bindings.Any())
                {
                    throw new ArgumentException($"{nameof(Bindings)} should be an empty");
                }
                if (Converter != null)
                {
                    throw new ArgumentException($"{nameof(Converter)} should be a null");
                }
            }
            else
            {
                if (!Bindings.Any())
                {
                    throw new ArgumentNullException(nameof(Bindings));
                }
                if (Converter == null)
                {
                    throw new ArgumentNullException(nameof(Converter));
                }
            }

            var target = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));

            if (target.TargetObject.GetType().FullName == "System.Windows.SharedDp")
            {
                return(this);
            }

            if (MultiBinding != null)
            {
                Converter          = MultiBinding.Converter;
                ConverterParameter = MultiBinding.ConverterParameter;
                ConverterCulture   = MultiBinding.ConverterCulture;
                foreach (var bindingBase in MultiBinding.Bindings)
                {
                    Bindings.Add(bindingBase);
                }
            }

            if (target.TargetObject is NestedBindingCollection)
            {
                var binding = new Binding
                {
                    Source = this
                };
                return(binding);
            }

            var multiBinding = new MultiBinding
            {
                Mode = BindingMode.OneWay
            };
            var tree      = GetNestedBindingsTree(this, multiBinding);
            var converter = new NestedBindingConverter(tree);

            multiBinding.Converter = converter;

            return(multiBinding.ProvideValue(serviceProvider));
        }