2011-04-16 3 views
2

Je suis en train d'implémenter mon propre BindingList<T> qui supporte le tri. Tout fonctionne bien jusqu'à présent, mais je suis confus sur la façon dont je devrais mettre en œuvre RemoveSortCore. La documentation est pas très explicite, il dit seulement:Sortability BindingList <T>: confusion à propos de RemoveSortCore

Supprime toute sorte appliquée avec ApplySortCore si le tri est mis en œuvre dans une classe dérivée

Est-ce que cela signifie que je dois rétablir l'ordre initial des articles? La mise en œuvre montre this MSDN article ne définit que _isSorted false, sans restaurer réellement l'ordre d'origine, ce qui le rend tout à fait inutile à mon humble avis ...

Si je veux être en mesure de rétablir l'ordre initial, je suppose que je dois maintenir un copie de la collection originale (ou existe-t-il un meilleur moyen?). Mais si je fais cela, comment puis-je gérer les modifications de la collection pendant qu'elle est triée?

  • Lors de la substitution InsertItem, dois-je ajouter le nouvel élément à la fin de la copie non triés?
  • Lors de la substitution de RemoveItem, l'index est placé dans la collection triée. Mais cela signifie que si je veux également supprimer l'élément de la collection non triée, j'ai besoin de trouver sa position d'origine, qui est une opération O (n), tandis que RemoveItem devrait normalement être une opération O (1). La même question s'applique également à SetItem.

Comment géreriez-vous cela? Toutes les suggestions sont les bienvenues

Répondre

5

Il appartient à l'opérateur de définir exactement ce que cela signifie. Les deux choix les plus évidents sont:

  1. Revert la liste à la forme originale: exemple officiel here

  2. Supprime le tri et procéder comme si l'on avait jamais été appliquée: Tel qu'il est utilisé dans MS.SqlServer.Management.Controls.SortableBindingList

+0

Merci, le premier article est exactement ce que je cherchais! –

Questions connexes