2016-06-21 6 views
-3

私は、インターフェイスの既存のコンシューマ(主にバインディングコントロールとなるだろう)が、追加と削除だけで表現できたものを超えて、インターフェイスの移動と置換を利用しているのだろうかと思っています。INotifyCollectionChangedのどの実装が実際に移動と置換を使用していますか?

特に:実際に使用したのですか、これは単に歴史的なアーティファクトですか?

+1

をリセットし、移動に反応しますアニメーション効果に使用することができます。必要に応じて、[ソースを検索](http://referencesource.microsoft.com/#System/compmod/system/collections/specialized/notifycollectionchangedeventargs.cs,c394c49be4a151e9,references)することもできます。 –

+0

@Damien_The_Unbelieverうわー、私は彼らがソースをオンラインで検索可能にしていたことを知らなかった。それは知って良いです。 – John

+0

Argsコンストラクタをメモします。予想されるデータが各変更タイプとともに提供されることを確実にすることに積極的です。 – Will

答えて

0

ObservableCollection<T>.Move(int, int)に電話すると、移動アクションが発生します。

おそらく、アイテムを置き換えるときと同じ動作を想定できます。しかしObservableCollectionにはReplaceメソッドがありません。 index accessor instead.

これらのアクションタイプは、常にINotifyCollectionChanged消費者によって処理される必要があります。余分な操作を防ぐヒントとして利用できます。

コレクションの高価なグラフィック表現があり、Removeとそれに続くInsertという名前を付けた場合を考えてみましょう。コレクションは1つの要素で縮小され、すぐに1つの要素だけ拡大します。これにより、削除されたインデックスの後にすべての要素が2回再描画される可能性があります。置換と移動は、コレクションのサイズが変更されていないことをコンシューマに知らせます。

+0

私はそれをすべて知っています。私の質問は、消費者が実際に使用しているかどうかです*。 – John

+0

この回答は、インターフェイスの一部として、絶対に処理する必要があることを示しています。リストボックスで試してみてください。イベントタイプをデバッガに書き込み、リストボックスの反応を観察します。 – Gusdor

+0

もちろんそれは処理する必要があります。問題は、リストボックスがこれを同等の追加/削除操作とは異なる方法で処理するかどうかです。私はUIを見るだけでどのように見えるのか分かりません。 – John

0

これは確かに歴史的なアーティファクトではありません。それはあなたのためにありますので、あなたはMoveと呼ぶことができます。置換とリスナーはそれに反応することができます。それがなければ、組み込みのコントロールがそれを使用するかどうかにかかわらず、インターフェースは不完全なものになります。

ItemsControlがCollectionChangedイベントをどのように処理するかはわかりませんが、MoveイベントとReplaceイベントのロジックもいくつかあると思います。結局のところ

、WPFはオープンソースであり、なぜあなたはここでチェックしない:あなたが見ることができるようにhttp://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Data/CollectionView.cs,4270b8e1bdd07308

を、のItemsControlで使用されるCollectionViewは、1つのことを想像するイベント

+0

moveとreplaceの両方をremoveとwithとaddで表現できるので、不完全ではありません。 – John

+0

最初にremoveを呼び出すと、項目数が変更されたことになりますが、これは真ではありません。たとえば、ListBoxはListBoxItemを削除してから新しいものを作成する必要はありませんが、既存のListBoxItemを再利用することができます。 – Liero

+0

@ジョン私は混乱しています。私の答えは、このコメントが表示されるまでに40分も足りないと、あなたはそれをすべて知っていると言いました。十分に明確ではないことを詳しく説明できますか? – Gusdor

関連する問題