I'm sorry if this seems stupid, but I need an event to get fired when an item is added to an observable collection and I cant get it to work. Here is some code. Please excuse the ridiculous naming conventions
Imports System.ComponentModel Imports System.Collections.ObjectModel Imports System.Collections.Specialized Class MainWindow Public gSettings As MeeSettings Public Artists As New People Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded gSettings = New MeeSettings AddHandler gSettings.PropertyChanged, AddressOf gSettings_Changed AddHandler gSettings.CollectionChanged, AddressOf gSettings_CollectionChanged Dim p1 As New Person p1.FirstName = "Pablo" p1.LastName = "Picasso" Dim p2 As New Person p2.FirstName = "Jeff" p2.LastName = "Koons" Artists.Add(p1) Artists.Add(p2) gSettings.MyPeople = Artists End Sub Private Sub gSettings_Changed(sender As Object, e As PropertyChangedEventArgs) ' Throw New NotImplementedException Console.WriteLine("GSettings_Changed ") End Sub Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim mee As New Person mee.FirstName = "Mona" mee.LastName = "Lisa" 'want an event to fire when this action takes place!!!!! gSettings.MyPeople.Add(mee) End Sub Private Sub gSettings_CollectionChanged(sender As Object, e As NotifyCollectionChangedEventArgs) Throw New NotImplementedException End Sub Private Sub objCopyOfCollectionItems_Changed(sender As Object, e As NotifyCollectionChangedEventArgs) Throw New NotImplementedException End Sub End Class Public Class MeeSettings Implements INotifyPropertyChanged, INotifyCollectionChanged Private Property _myPeople As New People Public Property MyPeople As People Get Return Me._myPeople End Get Set(value As People) Dim changed As Boolean = value.Count <> Me._myPeople.Count If changed Then Me._myPeople = value RaisePropertyChanged("MyPeople") End If End Set End Property Sub New() End Sub Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Private Sub RaisePropertyChanged(propertyName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) End Sub Public Event CollectionChanged(sender As Object, e As NotifyCollectionChangedEventArgs) Implements INotifyCollectionChanged.CollectionChanged Private Sub RaiseCollectionChanged() RaiseEvent CollectionChanged(Me, New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)) End Sub End Class Public Class People Inherits ObservableCollection(Of Person) Implements INotifyCollectionChanged Sub New() End Sub End Class Public Class Person Implements INotifyPropertyChanged Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Private Sub RaisePropertyChanged(propertyName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) End Sub Public Sub New() End Sub Private Const FirstNamePropertyName As String = "FirstName" Private _FirstName As String Public Property FirstName As String Get Return Me._FirstName End Get Set(value As String) Dim changed As Boolean = value <> Me._FirstName If changed Then Me._FirstName = value Me.RaisePropertyChanged(FirstNamePropertyName) End If End Set End Property Private Const LastNamePropertyName As String = "LastName" Private _LastName As String Public Property LastName As String Get Return Me._LastName End Get Set(value As String) Dim changed As Boolean = value <> Me._LastName If changed Then Me._LastName = value Me.RaisePropertyChanged(LastNamePropertyName) End If End Set End Property End Class
my favorite place on the net is msdn!