public override UIView GetViewForHeader(UITableView tableView, nint section) { var headerCell = InitCell <TVHeader>(CellIdentifierHeader, tableView); var sec = (int)section; var modelHeader = Items.ElementAtOrDefault(sec); OnBindHeader(headerCell, modelHeader, ItemExpandedState.ElementAtOrDefault(sec), sec); headerCell.ClickableViewForExpansion.OnClick(() => { ParentRowClicked?.Invoke(tableView, new RowParentClickEventArgs <TItem>((int)section, modelHeader)); if (ItemExpandedState.ElementAtOrDefault(sec)) { CollapseItem(sec); } else { ExpandItem(sec); } }); if (_listHeaderCells.ContainsKey(sec)) { _listHeaderCells[sec] = headerCell as IExpandable; } else { _listHeaderCells.Add(sec, headerCell as IExpandable); } return(headerCell.ContentView); }
public override nint RowsInSection(UITableView tableview, nint section) { if (!ItemExpandedState.ElementAtOrDefault((int)section)) { return(0); } return(Items.ElementAtOrDefault((int)section)?.SubExpandItems?.Count ?? 0); }
private void ExpandItem(int section) { // Return if current expanded item and item to expand are same. if (_singleExpandable && ItemExpandedState.Select((state, pos) => new Tuple <int, bool>(pos, state)) .FirstOrDefault(arg => arg.Item2)?.Item1 == section) { return; } if (_singleExpandable) { for (var i = 0; i < ItemExpandedState.Count(); i++) { if (ItemExpandedState[i]) { CollapseItem(i); } } } ItemExpandedState[section] = true; if (_listHeaderCells.TryGetValue(section, out var headerCell)) { headerCell?.OnExpand(); } var itemsInSection = (int)RowsInSection(TableView, section); if (itemsInSection <= 0) { return; } var rowsToAdd = new NSIndexPath[itemsInSection]; for (var i = 0; i < itemsInSection; i++) { rowsToAdd[i] = NSIndexPath.FromRowSection(i, section); } TableView.InsertRows(rowsToAdd, UITableViewRowAnimation.None); }