# DataStoreChangedHandler<TItem, TCollection> class

Namespace: [Eto](https://eto.picoe.ca/api/namespace/eto.md) · Assembly: [Eto](https://eto.picoe.ca/api/assembly/eto.md)

```cs
public abstract class DataStoreChangedHandler<TItem, TCollection> : CollectionChangedHandler<TItem, TCollection>, IEnumerable<TItem>
```

Class to help implement change handling for a [IDataStore<T>](https://eto.picoe.ca/api/type/eto.forms.idatastore-1.md)

**Remarks:** This is used for the platform handler of controls that use collections. This class helps detect changes to a collection so that the appropriate action can be taken to update the UI with the changes. Use this class as a base when you are detecting changes for an [IDataStore<T>](https://eto.picoe.ca/api/type/eto.forms.idatastore-1.md). If the object also implements [INotifyCollectionChanged](https://learn.microsoft.com/dotnet/api/system.collections.specialized.inotifycollectionchanged), it will get changed events. Otherwise, you must register a new collection each time.

**Type parameters:**

- `TItem`: Type of items in the data store
- `TCollection` (where class, IDataStore<TItem>): Type of the data store to detect changes on

## Properties

- [Count](https://eto.picoe.ca/api/type/eto.datastorechangedhandler-2/count.md): Gets the count of the items in the current registered collection.

## Methods

- [GetEnumerator](https://eto.picoe.ca/api/type/eto.datastorechangedhandler-2/getenumerator.md): Gets the enumerator.
- [InternalElementAt](https://eto.picoe.ca/api/type/eto.datastorechangedhandler-2/internalelementat.md): Gets the element at the specified index.
- [InternalIndexOf](https://eto.picoe.ca/api/type/eto.datastorechangedhandler-2/internalindexof.md): Implements the mechanism for finding the index of an item (the slow way)
- [OnRegisterCollection](https://eto.picoe.ca/api/type/eto.datastorechangedhandler-2/onregistercollection.md): Called when the collection is registered
- [IEnumerable.GetEnumerator](https://eto.picoe.ca/api/type/eto.datastorechangedhandler-2/system-collections-ienumerable-getenumerator.md)

## Inherited Members

- From [CollectionChangedHandler<TItem, TCollection>](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2.md): [Collection](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/collection.md), [AddItem](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/additem.md), [AddRange](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/addrange.md), [BeginUpdates](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/beginupdates.md), [ElementAt](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/elementat.md), [EndUpdates](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/endupdates.md), [IndexOf](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/indexof.md), [InsertItem](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/insertitem.md), [InsertRange](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/insertrange.md), [OnUnregisterCollection](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/onunregistercollection.md), [Register](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/register.md), [RemoveAllItems](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/removeallitems.md), [RemoveItem](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/removeitem.md), [RemoveRange](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/removerange.md), [ReplaceItem](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/replaceitem.md), [ReplaceRange](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/replacerange.md), [Reset](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/reset.md), [Unregister](https://eto.picoe.ca/api/type/eto.collectionchangedhandler-2/unregister.md)
