internal static Exception BindingSourceNotFound(BindingMemberExpressionNode node)
 {
     return
         (new InvalidOperationException(
              string.Format("The source cannot be found parameter name '{0}', binding member '{1}'",
                            node.ParameterName, node.Path)));
 }
示例#2
0
        private IExpressionNode VisitMethodCall(IMethodCallExpressionNode methodCall)
        {
            _isMulti = true;
            if (methodCall.Target != null)
            {
                return(methodCall);
            }
            BindingMemberExpressionNode member = GetOrAddBindingMember(string.Empty, (s, i) => new BindingMemberExpressionNode(string.Empty, s, i));

            return(new MethodCallExpressionNode(member, methodCall.Method, methodCall.Arguments, methodCall.TypeArgs).Accept(this));
        }
示例#3
0
        private Expression BuildBindingMember(BindingMemberExpressionNode bindingMember)
        {
            var param = Parameters.FirstOrDefault(expression => expression.Value.Name == bindingMember.ParameterName);

            if (param.Value != null)
            {
                return(param.Value);
            }

            var index = bindingMember.Index;

            if (index >= SourceValues.Count)
            {
                throw BindingExceptionManager.BindingSourceNotFound(bindingMember);
            }
            var parameter = SourceValues[index];

            Type type = typeof(object);

            if (parameter == null)
            {
                var binding = DataContext.GetData(BindingConstants.Binding);
                if (binding != null)
                {
                    var last = binding.SourceAccessor.Sources[index].GetPathMembers(false).LastMember;
                    type = last.Type;
                }
            }
            else
            {
                type = parameter.GetType();
            }
            var exParam = Expression.Parameter(type, bindingMember.ParameterName);

            Parameters.Add(new KeyValuePair <int, ParameterExpression>(index, exParam));
            return(exParam);
        }
示例#4
0
 internal static Exception BindingSourceNotFound(BindingMemberExpressionNode node)
 {
     return(new InvalidOperationException($"The source cannot be found parameter name '{node.ParameterName}', binding member '{node.Path}'"));
 }