Bonjour a tous,
J'ai fait un exemple tout simple pour essayer d'implémenter tout les mécanismes (a l’intérieur de la classe) qui font qu'une classe puisse être utilisée en tant que source de données avec le même comportement qu'un DataTable (par exemple). C'est a dire que la source de données doit pouvoir notifier automatiquement les contrôles liés lors de la modification, l'ajout et la suppression a travers la liaisons de données.
Pour la modification j'ai trouvé mais pour l'ajout ou la suppression je cherche encore.
Par exemple lorsque j’exécute la dernière ligne du code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
DataSourcePersonnes.Add(ThisPersonne)
Je ne vois pas ce nouveau élément dans le contrôle DataGridView.

Voici mon exemple de code :
La classe Personnes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Imports System.ComponentModel
 
Public Class Personnes
    Inherits List(Of Personne)
End Class
 
Public Class Personne
    Implements INotifyPropertyChanged
 
    'Public Event PropertyChanged As PropertyChangedEventHandler _
    '   Implements INotifyPropertyChanged.PropertyChanged
    Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) _
        Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
 
    ' This method is called by the Set accessor of each property.
    ' The CallerMemberName attribute that is applied to the optional propertyName
    ' parameter causes the property name of the caller to be substituted as an argument.
    Private Sub NotifyPropertyChanged(<CallerMemberName()> Optional ByVal propertyName As String = Nothing)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    End Sub
 
    Private _Nom As String
    <Description("Nom de la personne"), Category("(Identification)"), _
    DisplayName("Nom")> _
    Public Property Nom() As String
        Get
            Return _Nom
        End Get
        Set(ByVal value As String)
            _Nom = value
            NotifyPropertyChanged()
        End Set
    End Property
    Private _Prenom As String
    <Description("Prenom de la personne"), Category("(Identification)"), _
   DisplayName("Prenom")> _
    Public Property Prenom() As String
        Get
            Return _Prenom
        End Get
        Set(ByVal value As String)
            _Prenom = value
            NotifyPropertyChanged()
        End Set
    End Property
 
End Class
Le code du formulaire Form1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Class Form1
    Dim MainBindingSource As New BindingSource
    Dim DataSourcePersonnes As New Personnes
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
 
        AddHandler MainBindingSource.CurrentChanged, AddressOf MainBindingSource_CurrentChanged
 
        'Configuration du gestionnaire de liaison sur la source de données
        MainBindingSource.DataSource = DataSourcePersonnes
        'Liaison du gestionnaire avec les contrôles d'affichage de données
        DataGridView1.DataSource = MainBindingSource
        'MainBindingNavigator.BindingSource = MainBindingSource
    End Sub
 
    Private Sub MainBindingSource_CurrentChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        PropertyGrid1.SelectedObject = CType(sender, BindingSource).Current
    End Sub
 
    Private Sub btnNouveau_Click(sender As System.Object, e As System.EventArgs) Handles btnNouveau.Click
        Dim ThisPersonne As New Personne
        ThisPersonne.Nom = "Nom1"
        ThisPersonne.Prenom = "Prenom1"
        DataSourcePersonnes.Add(ThisPersonne)
    End Sub
End Class
Savez vous comment faire ? Merci beaucoup pour votre aide.