我正在使用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。