首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObservableCollection优于ObjectSet

ObservableCollection优于ObjectSet
EN

Stack Overflow用户
提问于 2011-05-31 21:12:39
回答 2查看 4.3K关注 0票数 5

为什么(在WPF、C#、实体框架中)将ListBox绑定到在ObjectSet (来自实体框架)上创建的ObservableCollection而不是直接绑定到ObjectSet更好呢?

还有一个问题:当我将ListBox绑定到ObservableCollection时,对集合更新ListBox的任何添加。太棒了。但是ObservableCollection是在ObjectContext (实体框架中)上创建的,并且向集合中添加一个新项并不会将项添加到上下文中.如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-31 21:16:51

ObservableCollection实现INotifyPropertyChangedINotifyCollectionChanged,这两个WPF都用于将元素重新绑定到UI。因此,您可以向ObservableCollection添加一个项,并且UI将立即更新,而不需要您进行代码交互。ObjectSet没有实现任何功能,因此无法获得此功能。

票数 6
EN

Stack Overflow用户

发布于 2011-05-31 23:15:55

(请注意你的“多一个问题”)

EntityFramework4.1提供了一个在WPF应用程序中特别有用的新特性--对象上下文的本地视图。它可以通过Local属性DbSet<T>获得。Local返回一个ObservableCollection<T>,其中包含当前附加到上下文(而不是状态Deleted)的T类型的所有实体。

Local非常有用,因为它与对象上下文保持自动同步。例如:您可以运行一个查询将对象加载到上下文中.

代码语言:javascript
复制
dbContext.Customers.Where(c => c.Country == "Alice's Wonderland").Load();

..。然后将上下文中的对象公开为ObservableCollection .

代码语言:javascript
复制
ObservableCollection<Customer> items = dbContext.Customers.Local;

..。并将其用作某些WPF ItemsSource ItemsControl。在此集合中添加或移除对象时.

代码语言:javascript
复制
items.Add(newCustomer);
items.Remove(oldCustomer);

..。它们会自动添加/移除到EF上下文中。调用SaveChanges会将对象插入/删除到数据库中/从数据库中删除。

同样地,向上下文中添加或移除对象.

代码语言:javascript
复制
dbContext.Customers.Add(newCustomer);
dbContext.Customers.Remove(oldCustomer);

..。自动更新Local集合并触发WPF绑定引擎的通知以更新UI。

Here是EF 4.1中关于Local的概述。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6193625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档