我正在使用EF连接到我的数据库。我有DbContext
用于获取DbSet<MyDataModel>
。我使用ObservableCollection<MyDataModel>
将数据绑定到WPF中的GridView
。这就是我填充集合的方式:
ObservableCollection<MyDataModel> myCollection = new ObservableCollection<MyDataModel>(dataContect.MyDataModels);
问题是我的数据库是从另一个源(完全是另一个应用程序)更新的,ObservableCollection
没有检测到项目何时被添加到数据库。我不知道会怎么样,但我不知道我怎么能做到的?数据库包含很多条目(> 10k),所以我不想定期重新加载所有条目。
我该怎么办?
修改
我觉得我有点不清楚(并且不确定ObservableCollections
如何工作),但是,我现在意识到我的主要问题是如何在数据库更新时刷新DbContext
。它与ObservableCollection
本身并没有多大关系。
答案 0 :(得分:2)
Observable Collection会在添加项目时通知您的UI。 如果你绑定它,你的界面将正确更新。
您仍需要向Observable集合添加项目才能触发此行为。 所以你仍然需要刷新你的DataContext。
签出this article以强制从SQL服务器刷新
答案 1 :(得分:2)
似乎根本问题在于您需要知道应用程序需要了解的内容已发生变化。
如果您对第二个应用程序有任何控制权,那么您可以发布一条消息,让您的应用程序知道它需要重新加载(或者甚至可以自己发布更改)。
如果您无法控制其他应用程序,则需要自行检测。您可以使用类似SqlDependency
的内容,但这不适用于客户端应用程序。您需要一个中央服务来执行监控,然后发布更改通知。
我当然可能完全错了,EF可能会内置一些内容来通知更改。
答案 2 :(得分:1)
正如名称所暗示的那样,可观察的集合是可观察的,但它没有观察到。它的pourpose是当有人添加/ remoce项目时通知,因此您可以使用它来自动反映集合中的更改。