BindingList<T>ソートをサポートする独自のものを実装しています。これまでのところすべてうまくいっていますが、どのように実装すればよいか混乱していますRemoveSortCore。ドキュメントはあまり明確ではなく、次のように書かれているだけです:
ソートが派生クラスで実装されている場合、ApplySortCore で適用されたソートを削除します
それは、アイテムの元の順序を復元する必要があるということですか? このMSDNの記事に示されている実装は、実際には元の順序を復元せずにfalseに設定_isSortedするだけなので、私見ではまったく役に立ちません...
元の順序を復元できるようにしたい場合は、元のコレクションのコピーを維持する必要があると思います (または、より良い方法はありますか?)。しかし、そうすると、ソート中にコレクションの変更をどのように処理すればよいでしょうか?
- をオーバーライドするとき
InsertItem、ソートされていないコピーの最後に新しいアイテムを追加するだけですか? - をオーバーライド
RemoveItemすると、ソートされたコレクションのインデックスが与えられます。ただし、並べ替えられていないコレクションからもアイテムを削除する場合は、元の位置を見つける必要があります。これは、O(n) 操作RemoveItemですが、通常は O(1) 操作であると予想されます。同じ質問が にも当てはまりますSetItem。
それをどのように処理しますか?どんな提案でも大歓迎です