Notify Collection Changed Event Args Reference

If you're like me and find yourself forgetting how the event args work in INotifyCollectionChanged, then here's a quick reference that might be useful.

I end up using INotifyCollectionChanged frequently, but not frequently enough to reliably recall how NotifyCollectionChangedEventArgs works when it is raised from the INotifyCollectionChanged.CollectionChanged event. There's a nice post by Stephen Cleary that summarizes how this works, but I wanted to take a minute to try to improve the formatting.

Add

The Action is NotifyCollectionChangedAction.Add when items are added to the collection.

Property Description
NewItems Contains any items that were added.
NewStartingIndex Index where new items were added, otherwise -1.

Remove

The Action is NotifyCollectionChangedAction.Remove when items are removed from the collection.

Property Description
OldItems Contains any items that were removed.
OldStartingIndex Index where where items were removed, otherwise -1.

Replace

The Action is NotifyCollectionChangedAction.Replace when old items are replaced with new items.

Property Description
NewItems Contains items that are replacing old items.
NewStartingIndex Equal to OldStartingIndex.
OldItems Contains the items that were replaced by new items.
OldStartingIndex Contains the index from which the old items were removed.

Move

The Action is NotifyCollectionChangedAction.Move when one or more items are moved within the collection. This operation is logically treated as a Remove followed by an Add, so NewStartIndex is interpreted as though the items had already been removed.

Property Description
NewItems SequenceEqual to OldItems, though they may be different instances.
NewStartingIndex Contains the index to which the items were moved.
OldItems Contains the items that were moved.
OldStartingIndex Contains the index from which the items were moved.

Reset

The Action is NotifyCollectionChangedAction.Reset when a collection is completely reset. None of the properties in the event args will have values.