コード例 #1
0
ファイル: ExpressionEvaluator.cs プロジェクト: holajan/dotvvm
        /// <summary>
        /// Evaluates the binding.
        /// </summary>
        internal object EvaluateBinding(ExpressionEvaluationVisitor visitor, string expression, string pathExpression)
        {
            // parse
            var node = ParseBinding(expression);
            var result = visitor.Visit(node);
            visitor.BackupCurrentPosition(result, pathExpression);

            return result;
        }
コード例 #2
0
ファイル: CommandResolver.cs プロジェクト: adamjez/dotvvm
        /// <summary>
        /// Resolves the path in the view model and returns the target object.
        /// </summary>
        private List<object> ResolveViewModelPath(object viewModel, RedwoodControl viewRootControl, string[] path)
        {
            var visitor = new ExpressionEvaluationVisitor(viewModel, viewRootControl);

            var outputHierarchy = new List<object>();
            outputHierarchy.Add(viewModel);
            foreach (var expression in path)
            {
                // evaluate path fragment
                var pathTree = CSharpSyntaxTree.ParseText(expression, new CSharpParseOptions(LanguageVersion.CSharp5, DocumentationMode.Parse, SourceCodeKind.Interactive));
                var pathExpr = pathTree.EnsureSingleExpression();

                var result = visitor.Visit(pathExpr);
                visitor.BackupCurrentPosition(result, expression);
                outputHierarchy.Add(result);
            }
            return outputHierarchy;
        }
コード例 #3
0
ファイル: CommandResolver.cs プロジェクト: adamjez/dotvvm
 /// <summary>
 /// Finds the method on view model.
 /// </summary>
 private static MethodInfo FindMethodOnViewModel(object viewModel, RedwoodControl viewRootControl, List<object> hierarchy, InvocationExpressionSyntax node, out object target)
 {
     MethodInfo method;
     var methodEvaluator = new ExpressionEvaluationVisitor(viewModel, viewRootControl, hierarchy)
     {
         AllowMethods = true
     };
     method = methodEvaluator.Visit(node.Expression) as MethodInfo;
     if (method == null)
     {
         throw new Exception("The command path was not found!");
     }
     target = methodEvaluator.MethodInvocationTarget;
     return method;
 }
コード例 #4
0
ファイル: CommandResolver.cs プロジェクト: adamjez/dotvvm
        /// <summary>
        /// Evaluates the expression the on view model with specified hierarchy.
        /// </summary>
        private object EvaluateOnViewModel(object viewModel, RedwoodControl viewRootControl, List<object> hierarchy, string expression)
        {
            var pathTree = CSharpSyntaxTree.ParseText(expression, new CSharpParseOptions(LanguageVersion.CSharp5, DocumentationMode.Parse, SourceCodeKind.Interactive));
            var pathExpr = pathTree.EnsureSingleExpression();

            var visitor = new ExpressionEvaluationVisitor(viewModel, viewRootControl, hierarchy);
            return visitor.Visit(pathExpr);
        }
コード例 #5
0
ファイル: CommandResolver.cs プロジェクト: adamjez/dotvvm
 /// <summary>
 /// Evaluates the command arguments.
 /// </summary>
 private static object[] EvaluateCommandArguments(object viewModel, RedwoodControl viewRootControl, List<object> hierarchy, InvocationExpressionSyntax node)
 {
     var arguments = node.ArgumentList.Arguments.Select(a =>
     {
         var evaluator = new ExpressionEvaluationVisitor(viewModel, viewRootControl, hierarchy);
         return evaluator.Visit(a);
     }).ToArray();
     return arguments;
 }