1
言って、私は今のObservableCollectionのObservableCollectionとハンドラ
Class Person
Name
Event DidSomething
Class House
WithEvents People as ObservableCollection(of Person)
Sub OnPersonDidSomething(p as Person)
Console.WriteLine("{0} did something", p.Name)
を持って、私はこれのObservableCollectionのハンドラをどのように実装する必要がありますか?
Private Sub People_CollectionChanged(_
sender As Object, _
e As NotifyCollectionChangedEventArgs) Handles People.CollectionChanged
Select Case e.Action
Case Specialized.NotifyCollectionChangedAction.Add
For Each mp As Person In e.NewItems
RemoveHandler mp.DidSomething, AddressOf OnPersonDidSomething
AddHandler mp.DidSomething, AddressOf OnPersonDidSomething
Next mp
Case Specialized.NotifyCollectionChangedAction.Remove
For Each mp As Person In e.NewItems
RemoveHandler mp.DidSomething, AddressOf OnPersonDidSomething
Next mp
End Select
End Sub
正しいですか? Move, Replace, Reset
アクションのために何をすべきですか?
リセットの場合、すべてのOldItemsのハンドラを削除し、実際のものに新しいものを追加する必要がありますか? – serhio
良い質問です。古いアイテムと新しいアイテムを削除して追加する必要がありますが、それらは空になると思います。メモリが漏れないようにするには、削除する既知のアイテムの別のコレクションを維持する必要があります(現在コレクション内のすべてのものに追加してください)。 – SLaks
ソースを見ると、 'Reset'は' Clear() 'を呼び出すときにのみ発生し、あなたに古い商品を渡すことはありません。 'Clear()'をサポートしていないか、古いアイテムを追跡するために別のリストを作成してください。 – SLaks