Ésta es una cuestión de edad, sino en beneficio de cualquier persona que pueda venir a través de esto a través de una búsqueda como lo hice:
NotifyCollectionChangedAction.Reset
significa "El contenido de la colección cambió drásticamente". Un caso en el que se plantea el evento Restablecer es cuando llama al Clear()
en la colección observable subyacente.
Con el evento Restablecer, no obtiene las colecciones NewItems
y OldItems
en el parámetro NotifyCollectionChangedEventArgs
.
Esto significa que es mejor utilizar el "remitente" del evento para obtener una referencia de la colección modificada y usarla directamente, es decir, asumir que es una nueva lista.
Un ejemplo de esto podría ser algo como:
((INotifyCollectionChanged)stringCollection).CollectionChanged += new NotifyCollectionChangedEventHandler(StringCollection_CollectionChanged);
...
void StringCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (string s in e.NewItems)
{
InternalAdd(s);
}
break;
case NotifyCollectionChangedAction.Remove:
foreach (string s in e.OldItems)
{
InternalRemove(s);
}
break;
case NotifyCollectionChangedAction.Reset:
ReadOnlyObservableCollection<string> col = sender as ReadOnlyObservableCollection<string>;
InternalClearAll();
if (col != null)
{
foreach (string s in col)
{
InternalAdd(s);
}
}
break;
}
}
Un montón de discusiones sobre este evento aquí: Restablecer When Clearing an ObservableCollection, There are No Items in e.OldItems.
¿Qué es entonces RESET? – Relativity