13

のようなメソッドObservableCollectionがないのはなぜですか?RemoveAllList

にこの機能を提供する拡張メソッドを実装しましたObservableCollectionが、この機能を提供しない特定の理由があるかどうかを知りたいです。

コレクションの変更により、何らかの形でデータバインディングに影響を与える可能性はありますか? この投稿では、 の使用中に問題が発生する可能性があることをいくつか指定していますが、この質問には触れていません。ObservableCollections

4

2 に答える 2

28

Clear()代わりに使用できるすべてのアイテムを削除するメソッドがあります。

Clearの代わりになぜそれらが使用されたのかを推測するのを危険にさらす必要がある場合、それは、アイテムが単にクリアされていることを示しながら、コレクションからアイテムを削除しているという提案を持っているRemoveAllためだと思います。RemoveAllClear

CollectionChangedこれにより、発生する通知の種類が異なります。Clear()イベントを発生させNotifyCollectionChangedAction.Reset、削除されたアイテムをイベントに含めない一方で、イベントを発生さRemoveNotifyCollectionChangedAction.Removed、削除されたアイテムをイベントに渡します。

CollectionChanged複数のアイテムを含むイベントを発生させることはできないため、NotifyCollectionChangedAction.Removedすべてのアイテムを削除してイベントを発生させると例外がスローされます。別の方法は、CollectionChanged削除されたすべてのアイテムに対してイベントを発生させることです。これは、パフォーマンスにかなり悪影響を与える可能性があります。また、単にイベントを発生さNotifyCollectionChangedAction.Resetせると、ユーザーがアイテムを削除するときにイベントが発生することを期待しているときに、混乱が生じる可能性がありRemovedます。

だから、名前が舞台裏で実際に起こっていることをよりよく説明しているので、彼らは.Clear()代わりに単に使用することに決めたと私は推測しています。.RemoveAll()

于 2012-07-27T15:20:46.067 に答える
0

なぜそれが実装されていないReverseのか、または他の方法を尋ねた方がいいかもしれません。最も一般的で絶対に必要なメソッド以外を実装する理由はまったくありません。横AddRemoveあるものはすべて便利です。(RemoveAllリストが実装する共通インターフェースの一部でさえなく、すでに多くのメソッドがあります)

于 2012-07-27T14:46:58.510 に答える