Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

ObservableCollection and INotifyCollectionChanged

$
0
0
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!


Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>