public void Selected(DialogViewController dvc, UITableView tableView, NSIndexPath path) { var root = BindingContext.CreateRootedView(this); if (root != null) { ((RootElement)root).ActivateController(dvc, tableView, path); } else { ActivateController(dvc, tableView, path); } }
private IElement GetRootElementForMember(Theme theme, UIView view, MemberInfo member, List <Binding> bindings) { var memberType = GetTypeForMember(member); var caption = GetCaption(member); IElement root = null; Type viewType = memberType; Type elementType = null; var genericType = memberType.GetGenericArguments().FirstOrDefault(); if (genericType != null) { viewType = genericType; } var listAttribute = member.GetCustomAttribute <ListAttribute>(); if (listAttribute != null && listAttribute.ViewType != null) { viewType = listAttribute.ViewType; elementType = listAttribute.ElementType; } var rootAttribute = member.GetCustomAttribute <RootAttribute>(); if (rootAttribute != null && rootAttribute.ViewType != null) { viewType = rootAttribute.ViewType; elementType = rootAttribute.ElementType; } var isEnum = memberType.IsEnum; var isEnumCollection = typeof(EnumCollection).IsAssignableFrom(memberType); var isMultiselect = member.GetCustomAttribute <MultiSelectionAttribute>() != null; var isSelect = member.GetCustomAttribute <SelectionAttribute>() != null; var isView = typeof(IView).IsAssignableFrom(memberType) || typeof(IView).IsAssignableFrom(viewType); var isUIView = typeof(UIView).IsAssignableFrom(memberType) || typeof(UIView).IsAssignableFrom(viewType); var isEnumerable = typeof(IEnumerable).IsAssignableFrom(memberType) && !(isView || isUIView); var isList = member.GetCustomAttribute <ListAttribute>() != null; if (isEnum || isEnumCollection || isMultiselect || isSelect) { ISection section = GetSectionElementForMember(theme, view, member, bindings); if (!isList && section != null) { var rootElement = new RootElement() { section }; rootElement.Caption = caption; rootElement.Opaque = false; rootElement.Theme = Theme.CreateTheme(Root.Theme); rootElement.ViewBinding = section.ViewBinding; rootElement.Theme.CellStyle = GetCellStyle(member, UITableViewCellStyle.Value1); root = rootElement; } else { root = section as IElement; } } else if (isEnumerable) { var rootElement = CreateEnumerableRoot(theme, member, caption, view, bindings); if (isList) { root = rootElement.Sections.FirstOrDefault() as IElement; } else { root = rootElement as IElement; } } else if (isView || isUIView) { object dataContext = view; MemberInfo dataContextMember = GetMemberFromDataContext(member, ref dataContext); var items = dataContextMember.GetValue(dataContext); var rootElement = new RootElement(caption) { Opaque = false }; rootElement.Theme = Theme.CreateTheme(Root.Theme); rootElement.ViewBinding.MemberInfo = dataContextMember; rootElement.ViewBinding.ElementType = elementType; rootElement.ViewBinding.ViewType = viewType; rootElement.ViewBinding.DataContextCode = DataContextCode.Object; rootElement.DataContext = dataContext; rootElement.Theme.CellStyle = GetCellStyle(member, UITableViewCellStyle.Default); if (items != null) { if (items is UIView) { rootElement.ViewBinding.View = items as UIView; } else { rootElement.DataContext = items; } } if (genericType != null) { SetDefaultConverter(view, member, "DataContext", new EnumerableConverter(), null, bindings); rootElement.ViewBinding.DataContextCode = DataContextCode.ViewEnumerable; rootElement.ViewBinding.ViewType = viewType; } if (isList) { var innerRoot = BindingContext.CreateRootedView(rootElement); root = innerRoot as IElement; } else { root = rootElement; } } else { throw new Exception(string.Format("Unknown type ({0}). Are you missing a [Root] or [List] attribute?", memberType)); } SetDefaultConverter(view, member, "DataContext", new ViewConverter(), null, bindings); return(root); }