public override PropertyTreeMetaObject Bind(PropertyTreeMetaObject target, PropertyTreeNavigator navigator, IServiceProvider serviceProvider) { if (target == null) { throw new ArgumentNullException("target"); } if (navigator == null) { throw new ArgumentNullException("navigator"); } if (navigator.IsProperty) { var textValue = navigator.Value as string; if (textValue != null) { return(BindInitializeValue( target, navigator, serviceProvider, () => target.BindInitializeValue(textValue, serviceProvider))); } var exprValue = navigator.Value as Expression; if (exprValue != null) { var exprContext = ExpressionContext.Compose( CurrentExpressionContext, ExpressionContext.FromNameScope(FindNameScope(target)) ); exprValue = ExpressionUtility.LiftToCall(exprValue, exprContext); return(BindInitializeValue( target, navigator, serviceProvider, () => target.BindInitializer(exprValue, exprContext, serviceProvider))); } throw new NotImplementedException(); } var children = SelectChildren(navigator); return(BindChildNodes(target, navigator, NodeList.Create(children))); }