2016-04-25 18 views
0

私は 'myCollection' ObservableCollectionをDataGridのItemsSourceにバインドしました。 Rowの追加または削除中にCollection Changeイベントが発生しました。しかし、私は既存の行の値の変化を追跡できませんでした。 ObservableCollection内のアイテムのプロパティが変更されたときに、どのように通知を受け取ることができますか?ObservableCollectionin WPF(MVVM)で編集された値を取得する方法

+1

'PricingGrpModel'に' INotifyPropertyChanged'を実装します。 https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx –

+0

ObservableCollectionはアイテムの特定の変更を認識していないため、ObservableCollectionから通知されますちょうどそれ自体の変化について新しいアイテムまたは削除されたアイテム。そのため、Chris Wohlert氏は、個々のオブジェクトの変更を処理できるように、PricingGrpModelにINotifyPropertyChangedを実装する必要があるとコメントしました。 –

+0

"PricingGrpModel"クラスはエンティティクラスであり、EFから生成されることを意味しています。どうすれば 'INotifyPropertyChanged'を実装できますか? – Dinesh

答えて

0

NewItemsOldItemsNotifyCollectionChangedEventArgsのプロパティを使用できます。あなたがObservableCollection.Remove()を呼び出すと

、削除項目がOldItemsプロパティに存在します:

void myCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    if (e.OldItems != null) 
    { 
     foreach (var removedItem in e.OldItems) 
     { 
     } 
    } 
} 

唯一の問題は、あなたがObservableCollection.Clear()メソッドを呼び出すときに、OldItemsプロパティがnullであること、です。

クリアされたアイテムにもアクセスする場合は、ObservableCollectionを継承してカスタムクラスを作成し、RemoveItemで保護されたメソッドをオーバーライドする必要があります。あなたはObservableCollection.Clear(呼び出すときRemoveItemメソッドも呼び出される)あなたはこの回答から、私のExtendedObservableCollectionを使用することができます:あなたは直接て、CollectionChangedイベントを経由して、アイテムの変更を追跡することはできませんTrigger InotifyPropertyChanged/CollectionChanged on ObservableCollection

0

。 できることは次のとおりです。 ObservableCollection内の各項目のCollectionChanged EventHandlerのPricingGrpModel.PropertyChangedにEventHandlerを追加および削除します。

関連する問題