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); }
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)); }