LimitedObservableCollection : partie 2

LimitedObservableCollection : partie 2

 

Suite à la partie 1 de la création de la classe LimitedObservableCollection, nous allons dans cet article implémenter les 4 cas types d’évènements vu précédemment.

 

Nous allons compléter la méthode


Le remplacement d’un item

 

 

Nous allons dans un premier temps vérifier que l’index de notre item est entre zéro et limit et si c’est le cas, on fera suivre l’événement

 

case NotifyCollectionChangedAction.Replace:
if (e.NewStartingIndex >= 0 && e.NewStartingIndex < _limit)
{
OnCollectionChanged(e);
}
break;

L’ajout d’un item


Comme précédemment, nous allons vérifier que l’index de notre élément est dans notre périmètre (entre 0 et limit) et si c’est le cas, alors on vérifie que l’on ne dépasse pas la limite après l’ajout de cet élément, et si c’est le cas, nous enlevons l’élément en trop

case NotifyCollectionChangedAction.Add:
if (e.NewStartingIndex >= 0 && e.NewStartingIndex < _limit) 	{ 		OnCollectionChanged(e); 		if (_observable.Count > _limit)
{
NotifyCollectionChangedEventArgs eRemove=
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, _observable[_limit], _limit);
OnCollectionChanged(eRemove);
}
}
break;

La remise à zéro

Ce cas est le plus simple à gérer, il suffit simplement de faire suivre la notification sans aucun traitement

case NotifyCollectionChangedAction.Reset:
OnCollectionChanged(e);
break;

La suppression d’un élément


Inversement au cas de l’ajout, il faudra faire attention à ‘ajouter’ un élément (s’il existe) si on supprime un élément dans notre périmètre afin de garder le bon nombre d’élèment.

case NotifyCollectionChangedAction.Remove:
{

if (e.OldStartingIndex >= 0 && e.OldStartingIndex < _limit) 		{ 			OnCollectionChanged(e); 			if (_observable.Count >= _limit)
{
NotifyCollectionChangedEventArgs eAdd =
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, _observable[_limit - 1], _limit - 1);
OnCollectionChanged(eAdd);
}
}
break;
}

Et voilà, nous avons maintenant une ObservableCollection disposant d’une limite maximum d’élément énumérable.

Code source entier

Comments are closed.