Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }