Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MessageCollection : ObservableCollection<TLMessageBase>
- {
- public ObservableCollection<MessageGroup> Groups { get; private set; } = new ObservableCollection<MessageGroup>();
- protected override void InsertItem(int index, TLMessageBase item)
- {
- base.InsertItem(index, item);
- var group = GroupForIndex(index);
- if (group == null || group?.FromId != item.FromId)
- {
- group = new MessageGroup(this, item.From, item.FromId);
- Groups.Insert(0, group);
- }
- group.Insert(index, item);
- }
- protected override void RemoveItem(int index)
- {
- base.RemoveItem(index);
- var group = GroupForIndex(index);
- if (group != null)
- {
- group.RemoveAt(index);
- }
- }
- private MessageGroup GroupForIndex(int index)
- {
- if (index == 0)
- {
- return Groups.FirstOrDefault();
- }
- else if (index == Count - 1)
- {
- return Groups.LastOrDefault();
- }
- else
- {
- return Groups.FirstOrDefault(x => x.StartIndex >= index && x.EndIndex <= index);
- }
- }
- }
- public class MessageGroup : ObservableCollection<TLMessageBase>
- {
- private ObservableCollection<MessageGroup> _parent;
- public MessageGroup(MessageCollection parent, TLUser from, int? fromId)
- {
- _parent = parent.Groups;
- From = from;
- FromId = fromId;
- }
- public TLUser From { get; private set; }
- public int? FromId { get; private set; }
- public int StartIndex
- {
- get
- {
- var count = 0;
- var index = _parent.IndexOf(this);
- if (index > 0)
- {
- count = _parent[index - 1].EndIndex;
- }
- return count;
- }
- }
- public int EndIndex
- {
- get
- {
- return StartIndex + Count - 1;
- }
- }
- protected override void InsertItem(int index, TLMessageBase item)
- {
- index -= StartIndex;
- base.InsertItem(index, item);
- }
- protected override void RemoveItem(int index)
- {
- index -= StartIndex;
- base.RemoveItem(index);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement