private void OnGroupsChanged(object sender, NotifyCollectionEventArgs e) { switch (e.Event) { case NotifyEvent.Insert: for (int i = e.StartIndex; i <= e.EndIndex; ++i) { var group = _group.Groups[i]; var item = new RepositoryGroupListItem(group); _groupsMapping.Add(group, item); _items.Insert(i, item); } break; case NotifyEvent.Remove: for (int i = e.StartIndex; i <= e.EndIndex; ++i) { var item = _items[i] as RepositoryGroupListItem; if (item != null) { _groupsMapping.Remove(item.DataContext); } } _items.RemoveRange(e.StartIndex, e.ModifiedItems); break; case NotifyEvent.Set: for (int i = e.StartIndex; i <= e.EndIndex; ++i) { var item = _items[i] as RepositoryGroupListItem; if (item != null) { _groupsMapping.Remove(item.DataContext); } var group = _group.Groups[i]; item = new RepositoryGroupListItem(group); _groupsMapping.Add(group, item); _items[i] = item; } break; case NotifyEvent.Clear: _groupsMapping.Clear(); _items.RemoveRange(0, e.ModifiedItems); break; } }
private void InsertRepositoryItem(int index, CustomListBoxItemsCollection target, RepositoryListItem itemToInsert) { if (!string.IsNullOrWhiteSpace(_txtFilter.Text)) { if (index == 0) { _repositories.Insert(0, itemToInsert); } else { var dst = _repositories.IndexOf((RepositoryListItem)_lstLocalRepositories.Items[index - 1]); _repositories.Insert(dst + 1, itemToInsert); } if (FilterItem(itemToInsert)) { target.Insert(index, itemToInsert); } } else { _repositories.Insert(index, itemToInsert); target.Insert(index, itemToInsert); } }