protected virtual IDataBinding CreateBinding([NotNull] IDataContext context, out object target, out IBindingPath targetPath) { IBindingSourceAccessor sourceAccessor; var formatExpression = context.GetData(BindingBuilderConstants.MultiExpression); var sourceDelegates = context.GetData(BindingBuilderConstants.Sources, true); if (sourceDelegates.Count > 1 || formatExpression != null) { formatExpression = formatExpression ?? FormatMembersExpressionDelegate; var sources = new IObserver[sourceDelegates.Count]; for (int index = 0; index < sourceDelegates.Count; index++) { sources[index] = sourceDelegates[index].Invoke(context); } sourceAccessor = new MultiBindingSourceAccessor(sources, formatExpression, context); } else { sourceAccessor = new BindingSourceAccessor(sourceDelegates[0].Invoke(context), context, false); } var binding = new DataBinding(new BindingSourceAccessor(GetBindingTarget(context, out target, out targetPath), context, true), sourceAccessor); object source; if (context.TryGetData(BindingBuilderConstants.Source, out source)) { binding.Context.AddOrUpdate(BindingConstants.Source, ToolkitExtensions.GetWeakReference(source)); } AddBehaviors(binding, context); return(binding); }
protected virtual IDataBinding CreateBinding([NotNull] IDataContext context, out object target, out IBindingPath targetPath) { IBindingSourceAccessor sourceAccessor; var formatExpression = context.GetData(BindingBuilderConstants.MultiExpression); var sourceDelegates = context.GetData(BindingBuilderConstants.Sources, true); if (sourceDelegates.Count > 1 || formatExpression != null) { formatExpression = formatExpression ?? FormatMembersExpressionDelegate; var sources = new IBindingSource[sourceDelegates.Count]; for (int index = 0; index < sourceDelegates.Count; index++) { sources[index] = Decorate(sourceDelegates[index].Invoke(context), false, context); } sourceAccessor = new MultiBindingSourceAccessor(sources, formatExpression, context); } else { sourceAccessor = new BindingSourceAccessor(Decorate(sourceDelegates[0].Invoke(context), false, context), context, false); } var binding = new DataBinding(new BindingSourceAccessor(GetBindingTarget(context, out target, out targetPath), context, true), sourceAccessor); AddBehaviors(binding, context); return(binding); }