オブジェクトでもあり、テキストボックスにバインドされているプロパティを持つオブジェクトがあります。MyOriginalObj = MyNewOject を設定して、テキストボックスに新しい値を表示できるようにしたいと思います。これは動作しません。私がしなければならないことは、MyOriginalObj.PropertyA = MyNewObj.PropertyA です。これにより、テキストボックスが更新されます。
実際のクラスには以下のテスト クラスよりも多くのプロパティがあり、すべての更新を行うために必要なコードが増えるため、後者の方法は避けたいと思います。必要に応じて、バインドを解除して新しいオブジェクトにバインドできると思いますが、これもコードを追加することになります。MyOriginalObj = MyNewObj メソッドが最も簡単な解決策ですが、それが可能かどうかはわかりません。お知らせ下さい。
Dim fam As New Family
Public Class Person
Dim _Age As Integer = 0
Dim _Name As String = ""
Public Property Age() As Integer
Get
Return _Age
End Get
Set(ByVal value As Integer)
_Age = value
End Set
End Property
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
Public Sub New(ByVal age As Integer, ByVal name As String)
With Me
._Age = age
._Name = name
End With
End Sub
End Class
-
Public Class Family
Implements System.ComponentModel.INotifyPropertyChanged
Public Event PropertyChanged(ByVal sender As Object,
ByVal e As System.ComponentModel.PropertyChangedEventArgs) _
Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Dim _Father As New Person(0, "")
Dim _Mother As New Person(0, "")
Public Property Father() As Person
Get
Return _Father
End Get
Set(ByVal value As Person)
_Father = value
RaiseEvent PropertyChanged(Me,
New System.ComponentModel.PropertyChangedEventArgs("Father"))
End Set
End Property
Public Property Mother() As Person
Get
Return _Mother
End Get
Set(ByVal value As Person)
_Mother = value
RaiseEvent PropertyChanged(Me,
New System.ComponentModel.PropertyChangedEventArgs("Mother"))
End Set
End Property
End Class
-
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.DataBindings.Add("Text", fam, "Father.Name")
TextBox2.DataBindings.Add("Text", fam, "Mother.Name")
End Sub
-
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
' Method A - works, textboxes displays the new values.
' fam.Father = New Person(30, "Joe")
' fam.Mother = New Person(29, "Jane")
' Exit Sub
' Method B - does not update textboxes.
Dim fam2 As New Family
fam2.Father = New Person(40, "Bob")
fam2.Mother = New Person(39, "Betty")
' I would like the updated properties to be shown in the bound
' textboxes when I set fam = fam2. Object fam will contain
' the new values but the textboxes will not reflect that.
fam = fam2
Console.WriteLine("{0},{1} : {2}, {3}", _
fam.Father.Name, _
fam.Father.Age, _
fam.Mother.Name, _
fam.Mother.Age)
End Sub