private void SlaveList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Add: foreach (var item in e.NewItems) { MasterList.Add((T)item); } break; case NotifyCollectionChangedAction.Move: // We don't care if an item is moved. break; case NotifyCollectionChangedAction.Remove: foreach (var item in e.NewItems) { MasterList.Remove((T)item); } break; case NotifyCollectionChangedAction.Replace: T oldItem = (T)e.OldItems[0]; T newItem = (T)e.NewItems[0]; int index = MasterList.IndexOf(oldItem); MasterList[index] = newItem; break; case NotifyCollectionChangedAction.Reset: foreach (var item in e.NewItems) { MasterList.Remove((T)item); } break; default: break; } }