2011-01-30 10 views
1

私はコードファーストのCTP5データコンテキストを持っています。私はDataGridを持つWPFアプリを持っています。エンティティフレームワーク - コードファースト、UIで更新されないDbSet.Local

dataGrid.DataContext = _context.Customers.Local; 

その後、私は、私はそれらのいくつかの作業を行うために別のクラスにこれらの顧客(顧客のリスト)を得、その後

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

を使用して、いくつかのエンティティを追加:私のようなそののDataContextを設定します。

customerUpdater.Update(customers); 

これは、時間がかかり、動作している各顧客のプロパティを更新します。例えば

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

私のWPF UIでは更新が表示されません。私が見ているのは、変更されていない顧客の元のリストだけです。 Customers.LocalはObservableCollectionですが、UIの更新が表示されない理由はわかりません。

プロパティの更新が発生するたびにSaveChanges()を呼びたくない場合は、ほぼ常にそうです。誰かがなぜこれが更新されないのか教えてもらえますか?

答えて

3

Customers.LocalがobservableCollectionであり、アイテムの1つのプロパティ "name"を更新すると、オブザーバブルコレクションを変更していないために更新が表示されません。プロパティ(observableCollection内に存在するアイテム(顧客)の1つ)のプロパティを変更しますが、observableCollectionは変更されずにUIに通知を送信しません(アイテムの数は同じです)。

UIを通知する顧客のプロパティ名を更新するときは、INotifyPropertyChangedインターフェイスを実装するために顧客クラスを作成する必要があります。

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

+0

わかりましたので、INotifyPropertyChangedのの定型的なコードを回避するための方法はありませんか?私はむしろすべての財産のすべてを書いて自分の時間を費やすつもりはない。 ObservableCollectionのポイントであると思って、INotifyPropertyChangedを自動的に実装し、そのアイテムの中でプロパティが変更されたかどうかを通知するなど、私のためにすべてを世話してくれましたか? – Chad

+1

observableCollectionは任意のタイプのアイテムを保持できるので、可能なクラスごとにプロパティが変更されるたびに通知を投げるのはあまり実用的ではないはずです(そして、通知を投げるプロパティを望まないかもしれない)ので、インターフェースを実装し、特にプロパティがその変更を通知するように選択することが最適と思われます。 –

関連する問題