保持双向绑定,当整个对象已经改变
问题描述:
我有一个类:保持双向绑定,当整个对象已经改变
Public Class TestClass
Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Sub OnNotifyChanged(ByVal pName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(pName))
End Sub
Private _One As Integer
Private _Two As Integer
Public Sub New(ByVal One As Integer, ByVal Two As Integer)
_One = One
_Two = Two
End Sub
Public Property One() As Integer
Get
Return _One
End Get
Set(ByVal value As Integer)
_One = value
OnNotifyChanged("One")
End Set
End Property
Public Property Two() As Integer
Get
Return _Two
End Get
Set(ByVal value As Integer)
_Two = value
OnNotifyChanged("Two")
End Set
End Property
End Class
我可以创建一个实例和两个文本框绑定到对象:
Dim MyObject As New TestClass(1, 2)
TextBoxOne.DataBindings.Add("Text", MyObject, "One")
TextBoxTwo.DataBindings.Add("Text", MyObject, "Two")
现在我可以改变文本框或对象:
MyObject.Two = 3
..对象和文本框以两种方式更新。
现在我想更新整个对象:
MyObject = New TestClass(3, 4)
...但是这不会更新文本框。
我在做什么错?
答
您的文本框保存对您创建的对象的第一个实例的引用。 现在您正在创建第二个实例,据说为了替换现有的实例,但文本框并未意识到更改。
您需要之一:
通过新的实例的文本框(直接,您所指派的第一个实例,或间接通过具有两个框绑定到一些“模型”对象) 。的
更新现有的实例,而不是用新的替代它(你可以简单地赋值到田间地头,或创造一些“AssignFrom(其他)”方法等)
让自己的一些其他 - 更有序 - 通知他们的基础数据源已经改变/应该改变的控制方式。