2010-08-24 42 views
0

我有一个类:保持双向绑定,当整个对象已经改变

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) 

...但是这不会更新文本框。

我在做什么错?

回答

1

您的文本框保存对您创建的对象的第一个实例的引用。 现在您正在创建第二个实例,据说为了替换现有的实例,但文本框并未意识到更改。

您需要之一:

  1. 通过新的实例的文本框(直接,您所指派的第一个实例,或间接通过具有两个框绑定到一些“模型”对象) 。的

  2. 更新现有的实例,而不是用新的替代它(你可以简单地赋值到田间地头,或创造一些“AssignFrom(其他)”方法等)

  3. 让自己的一些其他 - 更有序 - 通知他们的基础数据源已经改变/应该改变的控制方式。