将项目直接添加到数据库时,不会更新可观测集合

本文关键字:更新 可观 集合 项目 添加 数据库 | 更新日期: 2023-09-27 17:56:23

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

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

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

我能做什么?

编辑:我想我有点不清楚(并且不太确定ObservableCollections是如何工作的),但是是的,我现在意识到我的主要问题是如何在数据库更新时刷新DbContext。这与ObservableCollection本身并没有太大关系。

将项目直接添加到数据库时,不会更新可观测集合

似乎根本问题是您需要知道您的应用程序需要了解的某些更改。

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

如果您无法控制其他应用程序,则需要自己检测这些应用程序。您可以使用类似 SqlDependency 的东西,尽管这不适合客户端应用程序。您需要一个中心服务来执行监视,然后发布更改通知。

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

观察集合会在添加项目时通知 UI。如果您绑定到它,您的接口将正确更新。

您仍然必须将项添加到可观察集合中才能触发此行为。因此,您仍然需要刷新数据上下文。

查看本文以强制从 SQL 服务器刷新

顾名思义,可观察集合是可观察的,但它不观察异构。它的 pourpose 是通知有人从中添加/重新处理项目,因此您可以使用它来拥有一个自动反映集合中更改的 UI。