2011-01-30 98 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

相關問題