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();
            }
        }