/// <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; }
/// <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; }