CollectionViewSource类是否包含INotifyPropertyChanged接口的功能?

时间:2011-03-11 18:26:56

标签: visual-studio-2010 binding inotifypropertychanged collectionviewsource

我写过1个WPF应用程序。一个非常简单的应用。它工作得很好,并且今天被大量用作LOB应用程序。现在我将开始重新编写一个旧的VB6应用程序,并将它变成一个WPF应用程序。在处理第一个应用程序时,我了解了INotifyPropertyChanged接口,以及它对WPF / Silverlight数据绑定的重要性。我现在担心的是,很久以前我写了一个WCF服务,用来取代我多年前在VB6中为旧的VB6应用程序编写的旧中间层组件。我写的WCF服务返回ADO.NET数据集,因为老实说我多年来一直在与它们合作并且对它们感到满意。但是,现在我开始研究这个新的应用程序了,我非常关心我的WCF服务,因为ADO.NET数据集没有实现INotifyPropertyChanged接口。

所以我开始关注其他事情了。现在我正在看实体框架。我正在使用Julia Lerman的书“编程实体框架:第二版”,它看起来很有前途。我正在研究她的WPF应用程序示例,该应用程序使用她在前一章中编写的EDM程序集。包括对程序集的引用给了我CollectionViewSource,至少对我来说,它看起来好像它们的行为方式与INotifyPropertyChanged接口的行为方式相同。

所以我的问题是:CollectionViewSource类是否实现了INotifyPropertyChanged接口?我已经尝试过查看MSDN文档了,它并没有直接说,但是我想知道DependencyObject类CollectionViewSource是否继承了与INotifyPropertyChanged接口相同的功能,或者CollectionViewSource是否实现了它?

2 个答案:

答案 0 :(得分:1)

您会注意到CollectionViewSource上的MSDN文档包含此类声明:

Public Class CollectionViewSource _
    Inherits DependencyObject _
    Implements ISupportInitialize, IWeakEventListener

它和它的基类都没有实现INotifyPropertyChanged。绑定到CollectionViewSource的View时,必须在基础集合更改时自己调用its Refresh() method。如果更改CVS的属性(例如排序和分组),则会自动调用Refresh。

答案 1 :(得分:1)

只是提到罗德回答的一些细节:

在向集合中添加或删除项目时,项目将通过任何过滤器,分组,排序等。

但是,当现有项目的属性发生变化时,您必须自行处理以更新过滤器,分组等。

此时,Refresh()的解决方案起作用,但是由于整个集合得到刷新,因此可能会带来非常糟糕的用户体验。

一种解决方案是模拟项目的移除/插入。 See my post 了解更多细节。