为什么(在WPF、C#、实体框架中)将ListBox绑定到在ObjectSet (来自实体框架)上创建的ObservableCollection而不是直接绑定到ObjectSet更好呢?
还有一个问题:当我将ListBox绑定到ObservableCollection时,对集合更新ListBox的任何添加。太棒了。但是ObservableCollection是在ObjectContext (实体框架中)上创建的,并且向集合中添加一个新项并不会将项添加到上下文中.如何解决这个问题?
发布于 2011-05-31 21:16:51
ObservableCollection实现INotifyPropertyChanged和INotifyCollectionChanged,这两个WPF都用于将元素重新绑定到UI。因此,您可以向ObservableCollection添加一个项,并且UI将立即更新,而不需要您进行代码交互。ObjectSet没有实现任何功能,因此无法获得此功能。
发布于 2011-05-31 23:15:55
(请注意你的“多一个问题”)
EntityFramework4.1提供了一个在WPF应用程序中特别有用的新特性--对象上下文的本地视图。它可以通过Local属性DbSet<T>获得。Local返回一个ObservableCollection<T>,其中包含当前附加到上下文(而不是状态Deleted)的T类型的所有实体。
Local非常有用,因为它与对象上下文保持自动同步。例如:您可以运行一个查询将对象加载到上下文中.
dbContext.Customers.Where(c => c.Country == "Alice's Wonderland").Load();..。然后将上下文中的对象公开为ObservableCollection .
ObservableCollection<Customer> items = dbContext.Customers.Local;..。并将其用作某些WPF ItemsSource ItemsControl。在此集合中添加或移除对象时.
items.Add(newCustomer);
items.Remove(oldCustomer);..。它们会自动添加/移除到EF上下文中。调用SaveChanges会将对象插入/删除到数据库中/从数据库中删除。
同样地,向上下文中添加或移除对象.
dbContext.Customers.Add(newCustomer);
dbContext.Customers.Remove(oldCustomer);..。自动更新Local集合并触发WPF绑定引擎的通知以更新UI。
Here是EF 4.1中关于Local的概述。
https://stackoverflow.com/questions/6193625
复制相似问题