我想知道在
WPF中使用CollectionViews的最佳实践是什么,特别是使用CollectionViewSource.GetDefaultView()方法.有没有人遇到使用GetDefaultView的任何问题?我们担心它可能会导致一些内存泄漏.
通常是手动创建ListCollectionViews而不是依赖GetDefaultView()更好的做法吗?
WPF如何管理这些视图?收集时他们会得到GC吗?我看过一些文章说你需要从他们的源集合中分离CollectionViews,否则你会有内存泄漏.
谢谢你的帮助!
最佳答案 Bea声称使用CollectionViewSource.GetDefaultView()是她给定集合的
favorite way for accessing the view.此外,我个人从未遇到任何使用CollectionViewSource.GetDefaultView()的问题,但在给定的场景中肯定是可能的.
您必须了解每个集合都有一个默认视图,当您将给定属性绑定到给定集合时,WPF会自动使用视图包装集合并绑定到视图;不是收藏品.
由于这是WPF框架的一部分,因此您必须假设每个集合都有一个与之关联的视图,然后在处理集合时将其处理掉.如果通过可绑定属性引用了该集合,那么引用该集合的关联视图是否会调用CollectionViewSource.GetDefaultView(),因此您仍然处于相同的困境中.
经验evidence存在,直到集合超出范围,相关的观点将不会被GC;但请记住,这是处理带有实现INotifyCollectionChanged的集合.
根据您的情况,可能存在集合和相关视图之间的1:1关系,因此耦合可能不会产生任何障碍.在这种情况下,一旦集合超出范围,视图就是GC,这不是问题.
它可以归结为谨慎行事,并确保您了解更复杂情况下的情况,以便您采取适当的措施.