private static EntityListController BuildEntitySelector(INode rootNode, Func<IParentNode, IAccessor<string>> fnGetText, RootNode actualRootNode, IParentNode dynamicData) { var entityList = rootNode.Get<IEntityList<IUIEntityRow>>(); var selector = new EntitySelector {Rows = entityList.Rows, SelectedRow = entityList.Rows.First()}; var rowSelector = dynamicData.Nodes("rowSelector").First(); rowSelector.Register(selector); var textOutput = dynamicData.Nodes("textOutput").First().Get<IAccessor<string>>(); var nodeMessage = new NodeMessage { Target = textOutput, MessagePredicate = (message => message.Method.Name == "set_SelectedRow"), TargetDelegate = (Func<IInvocation, Action<IAccessor<string>>>) (row => accessor => accessor.Value = fnGetText(((IEntityRow)row.Arguments.First()).Context).Value) //TODO: 1. This seems a little complicated... //Somebody, or something in the xml needs to clue the framework in to how to do this wiring. }; actualRootNode.InstallHook(nodeMessage); var _entityListController = new EntityListController {EntityList = rowSelector.Get<IEntitySelector>()}; _entityListController.Beginning(); return _entityListController; }
private static IAccessor<string> BuildTextDisplay(IParentNode rootNode, IContainer container) { var textOutput = rootNode.Nodes("textOutput").First(); textOutput.Register<IAccessor<string>>(new TextDisplay {Parent = container}); return textOutput.Get<IAccessor<string>>(); }