views:

16

answers:

1

I have a class:

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

I can create an instance and bind two TextBoxes to the object:

    Dim MyObject As New TestClass(1, 2)
    TextBoxOne.DataBindings.Add("Text", MyObject, "One")
    TextBoxTwo.DataBindings.Add("Text", MyObject, "Two")

Now I can change the TextBoxes or the object:

MyObject.Two = 3

..the object and TextBoxes are updated in two ways.

Now I want to update the whole object:

MyObject = New TestClass(3, 4)

...but this doesn't update the TextBoxes.

What am I doing wrong?

+1  A: 

Your text boxes hold a reference to the first instance of the object you've created. Now you're creating a second instance, supposedly in order to replace the existing instance, but the text boxes are unaware of the change.

You needs to either:

  1. Pass the new instance to the text boxes (directly, as you assigned the first instance, or indirectly by having some "Model" object that both boxes are bound to).

  2. Update the existing instance instead of replacing it with a new one (you can simply assign values to the fields, or create some "AssignFrom (other)" method, etc.)

  3. Get yourself some other - more orderly - way of notifiying the controls that their underlying data source has changed / should be changed.

M.A. Hanin