예제 #1
0
        /// <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
        /// <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;
        }