4

WPFでCollectionViewsを操作するためのベストプラクティス、特にCollectionViewSource.GetDefaultView()メソッドの使用について疑問に思っています。GetDefaultViewの使用で問題が発生した人はいますか?メモリリークが発生している可能性があります。

GetDefaultView()に依存するよりも、ListCollectionViewsを手動で作成する方が一般的に良い方法ですか?

WPFはこれらのビューをどのように管理しますか?コレクションがGCされるとき、彼らはGCを受けますか?CollectionViewsをソースコレクションからデタッチする必要があるという記事をいくつか見ました。そうしないと、メモリリークが発生します。

助けてくれてありがとう!

4

1 に答える 1

2

Bea は、特定のコレクションのビューにアクセスするためのお気に入りの方法をCollectionViewSource.GetDefaultView()使用すると述べています。さらに、私は個人的に を使用して問題に遭遇したことはありませんが、特定のシナリオでは確かに可能です。CollectionViewSource.GetDefaultView()

すべてのコレクションには既定のビューがあり、特定のプロパティを特定のコレクションにバインドすると、WPF は自動的にコレクションをビューでラップし、ビューにバインドすることを理解する必要があります。コレクションではありません。

これは WPF フレームワークの一部であるため、関連付けられたビューを持つすべてのコレクションで、コレクションが破棄されるときに破棄されると想定する必要があります。バインド可能なプロパティを介してコレクションへの参照がある場合、呼び出しを行うかどうかに関係なく、コレクションを参照する関連付けられたビューがあるCollectionViewSource.GetDefaultView()ため、同じ苦境に陥ります。

コレクションが範囲外になるまで、関連付けられたビューは GC されないという経験的な証拠が存在します。ただし、これは implements を持つコレクションを扱っていたことに注意してINotifyCollectionChangedください。

状況によっては、コレクションと関連付けられたビューの間に 1 対 1 の関係が存在する可能性があるため、カップリングが何の障害にもならない場合があります。このシナリオでは、コレクションが範囲外になった後に GC されたビューは問題になりません。

要するに、慎重に行動し、より複雑な状況の中で何が起こっているのかを確実に把握して、適切な措置を講じることができます。

于 2011-02-02T18:44:39.030 に答える