将项目直接添加到数据库时,不会更新ObservableCollection

时间:2013-01-28 10:28:24

标签: c# wpf entity-framework observablecollection

我正在使用EF连接到我的数据库。我有DbContext用于获取DbSet<MyDataModel>。我使用ObservableCollection<MyDataModel>将数据绑定到WPF中的GridView。这就是我填充集合的方式:

ObservableCollection<MyDataModel> myCollection = new ObservableCollection<MyDataModel>(dataContect.MyDataModels);

问题是我的数据库是从另一个源(完全是另一个应用程序)更新的,ObservableCollection没有检测到项目何时被添加到数据库。我不知道会怎么样,但我不知道我怎么能做到的?数据库包含很多条目(> 10k),所以我不想定期重新加载所有条目。

我该怎么办?

修改 我觉得我有点不清楚(并且不确定ObservableCollections如何工作),但是,我现在意识到我的主要问题是如何在数据库更新时刷新DbContext。它与ObservableCollection本身并没有多大关系。

3 个答案:

答案 0 :(得分:2)

Observable Collection会在添加项目时通知您的UI。 如果你绑定它,你的界面将正确更新。

您仍需要向Observable集合添加项目才能触发此行为。 所以你仍然需要刷新你的DataContext。

签出this article以强制从SQL服务器刷新

答案 1 :(得分:2)

似乎根本问题在于您需要知道应用程序需要了解的内容已发生变化。

如果您对第二个应用程序有任何控制权,那么您可以发布一条消息,让您的应用程序知道它需要重新加载(或者甚至可以自己发布更改)。

如果您无法控制其他应用程序,则需要自行检测。您可以使用类似SqlDependency的内容,但这不适用于客户端应用程序。您需要一个中央服务来执行监控,然后发布更改通知。

我当然可能完全错了,EF可能会内置一些内容来通知更改。

答案 2 :(得分:1)

正如名称所暗示的那样,可观察的集合是可观察的,但它没有观察到。它的pourpose是当有人添加/ remoce项目时通知,因此您可以使用它来自动反映集合中的更改。