ObservableCollection比ObjectSet更好

Car*_*s00 5 .net c# data-binding wpf entity-framework

为什么它更好(在WPF,C#,实体框架)绑定ListBoxObservableCollection时创建的ObjectSet(从实体框架),而不是结合ObjectSet直接?

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

Sla*_*uma 15

(请注意"另外一个问题")

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

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

dbContext.Customers.Where(c => c.Country == "Alice's Wonderland").Load();
Run Code Online (Sandbox Code Playgroud)

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

ObservableCollection<Customer> items = dbContext.Customers.Local;
Run Code Online (Sandbox Code Playgroud)

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

items.Add(newCustomer);
items.Remove(oldCustomer);
Run Code Online (Sandbox Code Playgroud)

...它们会自动添加到EF环境中/从中删除.调用SaveChanges将在数据库中插入/删除对象.

同样在上下文中添加或删除对象......

dbContext.Customers.Add(newCustomer);
dbContext.Customers.Remove(oldCustomer);
Run Code Online (Sandbox Code Playgroud)

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

以下LocalEF 4.1 的概述.


Tej*_*ejs 6

ObservableCollection实现INotifyPropertyChanged以及INotifyCollectionChangedWPF用于将元素重新绑定到UI的两个实现.因此,您可以向ObservableCollection添加一个项目,并立即更新UI,而不会与您进行代码交互.ObjectSet既不实现,也不实现此功能.