private (TGroupedItem, TGroupKey) GetGroupedItemByKey(T item) { TGroupKey groupKey = GroupKeyGetter(item); var currentGroupedItem = GroupedItems.FirstOrDefault(groupedItem => groupedItem.TheKey.ObjEquals(groupKey)); return(currentGroupedItem, groupKey); }
private void CreateGroupedItems(TLMessageBase currentItem) { var message73 = currentItem as TLMessage73; if (message73 != null && message73.GroupedId != null) { var firstItem = GroupedItems.FirstOrDefault() as TLMessage73; if (firstItem == null || (firstItem.GroupedId != null && firstItem.GroupedId.Value != message73.GroupedId.Value)) { var items = new List <TLMessageBase>(); for (var i = _items.Count - 1; i >= 0; i--) { var item = _items[i] as TLMessage73; if (item != null && item.GroupedId != null && item.GroupedId.Value == message73.GroupedId.Value) { items.Add(item); } } GroupedItems.IsNotifying = false; GroupedItems.Clear(); if (items.Count > 1) { foreach (var item in items) { GroupedItems.Add(item); } } GroupedItems.IsNotifying = true; GroupedItems.Refresh(); var view = GetView() as ImageViewerView; if (view != null) { view.ScrollTo(currentItem, 0.0); } } else if (firstItem.GroupedId != null && firstItem.GroupedId.Value == message73.GroupedId.Value) { var view = GetView() as ImageViewerView; if (view != null) { view.ScrollTo(currentItem, 0.0); } } else { GroupedItems.Clear(); } } else { GroupedItems.Clear(); } }