クラスが を実装するINotifyPropertyChangedと、BindingList<T>クラスは、プロパティが に等しいオブジェクトを持つListChanged各PropertyChangedイベントでイベントを発生させます。ListChangedEventArgsListChangedTypeItemChanged
この知識を武器に、あなたが望むことを達成できるはずだと思います。(ここListChangedType == ListChangedType.ItemChangedで、 のインデックスNewIndexにあるオブジェクトをBindingList<T>サービスに渡します。)
更新: 以下は、アイテムが を通じて変更されたときにListChangedイベントが発生することを示すために作成したサンプル アプリケーションですDataGridView。
CustomObjectクラス: の単純な実装INotifyPropertyChanged
Imports System.ComponentModel
Public Class CustomObject
Implements INotifyPropertyChanged
Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Private _name As String
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
OnPropertyChanged("Name")
End Set
End Property
Protected Sub OnPropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
End Class
クラス: にバインドされたDataBindingTestForm基本FormクラスDataGridViewBindingList(Of CustomObject)
Imports System.ComponentModel
Public Class DataBindingTestForm
Private WithEvents _customObjects As New BindingList(Of CustomObject)
Private Sub DataBindingTestForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim obj As New CustomObject
obj.Name = "John"
_customObjects.Add(obj)
obj = New CustomObject
obj.Name = "Bill"
_customObjects.Add(obj)
MainDataGridView.DataSource = _customObjects
End Sub
Private Sub _customObjects_ListChanged(ByVal sender As Object, ByVal e As ListChangedEventArgs) Handles _customObjects.ListChanged
If Not e.ListChangedType = ListChangedType.ItemChanged Then Return
Notify("ListChanged event fired. Index: {0}, Value: {1}", e.NewIndex, _customObjects(e.NewIndex).Name)
End Sub
Private Sub Notify(ByVal format As String, ByVal ParamArray args() As Object)
MsgBox(String.Format(format, args))
End Sub
End Class
上記のデモ アプリケーションを実行しているときに、セルの値を変更するとDataGridView(たとえば、"John" から "George" に)、メッセージ ボックスに次のテキストが表示されます。
ListChanged event fired. Index: 0, Value: George
これを自分で試してみて、さらに問題が発生した場合はお知らせください。