J'ai vu le code comme suit dans la boîte à outils Silverlight et ne peut pas comprendre comment il est sûr de le faire:Manipulation ObservableCollection CollectionChanged événement
private void ItemsSourceCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// Update the cache
if (e.Action == NotifyCollectionChangedAction.Remove && e.OldItems != null)
{
for (int index = 0; index < e.OldItems.Count; index++)
{
_items.RemoveAt(e.OldStartingIndex);
}
}
}
Si vous supprimez un élément de dire l'indice 5 ne cela change l'indice actuel de chaque article dans la collection _items
après l'index 5 pour être un moins qu'avant? Alors, comment est-il sûr de supprimer continuellement des éléments en utilisant leurs "vieux" index comme le fait ce code?
Je voudrais vraiment comprendre pourquoi cela fonctionne.
Des idées?
La seule façon pour moi de donner un sens est de savoir si e.OldItems était garanti par ordre décroissant. Mais je ne vois aucune mention de cela dans les documents MSDN, ce qui me rend nerveux. – user229046
Sans connaître l'intention et les conditions préalables que le code ci-dessus attend, vous ne pouvez pas vraiment dire si c'est correct ou non. Cependant, il semble que cela "pourrait être" correct, si l'intention était de supprimer une série d'éléments ascendants contigus dans une liste. – LBushkin
Eh bien supposons que nous parlons de ObservableCollection qui fait partie de .Net. Il implémente l'interface INotifyCollectionChanged. Je suppose que ce que je demande est, cela garantit-il que NotifyCollectionChangedEventArgs vous donnera des index dans le bon ordre pour permettre au code ci-dessus de toujours fonctionner? De même, ne supprimeriez-vous pas les éléments par ordre décroissant afin de ne pas être affectés par le décalage d'index? –
user229046