2011-01-30 99 views
1

我有一个Code First,CTP5数据上下文。我有一个DataGrid的WPF应用程序。我设置它的DataContext像:实体框架 - 代码优先,DbSet.Local不在UI中更新

dataGrid.DataContext = _context.Customers.Local; 

然后我用

_context.Customers.Add(customer1); and so on 
_context.SaveChanges(); 

然后,我给这些客户(客户列表)到另一个类做对他们的一些工作增加一些实体。

customerUpdater.Update(customers); 

这需要很长时间,它会在每个客户工作时更新每个客户的属性。例如

foreach(var customer in customers) { customer.Name = "updated name"; } 

虽然我在WPF UI中看不到这些更新!我所看到的只是未改变的客户的原始列表。 Customers.Local虽然是ObservableCollection,但我不明白为什么我没有看到UI中的更新。

每次发生属性更新时,我都不想调用SaveChanges(),它几乎会不断。有人能告诉我为什么这不会更新吗?

回答

3

如果Customers.Local是一个observableCollection,并且您更新其中一个项目的属性“name”,则您没有看到更新,因为您没有修改可观察集合,您正在修改的是一个属性,但observableCollection不会向UI发送任何通知,因为它保持不变(具有相同数量的项目)

如果您希望通知UI当您更新客户的属性名称时,必须让客户类实现INotifyPropertyChanged接口。

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

+0

好了,所以没有办法避免INotifyPropertyChanged的那样板代码?我宁愿不花时间为所有财产写下所有这些。我认为这是ObservableCollection的重点,它会自动实现INotifyPropertyChanged并为我处理所有事情,包括通知属性是否在其中一个项目内发生更改? – Chad 2011-01-30 17:51:24

相关问题