protected override async Task OnParametersSetAsync() { if (GetKey == null) { throw new Exception("Must have GetKey."); } if (Selection != null) { Selection.SelectionMode = this.SelectionMode; Selection.GetKey = item => GetKey(item); } if (SubGroupSelector != null) { if (ItemsSource != null && !ItemsSource.Equals(_itemsSource)) { if (Selection != null) { Selection.SetItems(FlattenList(ItemsSource, SubGroupSelector), false); } _itemsSource = ItemsSource; if (_itemsSource != null) { dataItems = new ObservableCollection <IGroupedListItem3 <TItem> >(); int cummulativeCount = 0; for (var i = 0; i < _itemsSource.Count; i++) { var group = new HeaderItem3 <TItem, TKey>(_itemsSource[i], 0, cummulativeCount, SubGroupSelector, GroupTitleSelector); dataItems.Add(group); var subItemCount = BFUGroupedList <TItem, TKey> .GetPlainItemsCount(_itemsSource[i], SubGroupSelector); cummulativeCount += subItemCount; } } } } await base.OnParametersSetAsync(); }
public static int GetPlainItemsCount(TItem item, Func <TItem, IEnumerable <TItem> > subgroupSelector) { var subItems = subgroupSelector(item); if (subItems == null || subItems.Count() == 0) { return(1); } else { int count = 0; foreach (var subItem in subItems) { var subcount = BFUGroupedList <TItem, TKey> .GetPlainItemsCount(subItem, subgroupSelector); count += subcount; } return(count); } }