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)

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

我究竟做错了什么?

4

1 回答 1

1

您的文本框包含对您创建的对象的第一个实例的引用。现在您正在创建第二个实例,据说是为了替换现有实例,但文本框不知道更改。

您需要:

  1. 将新实例传递给文本框(直接,当您分配第一个实例时,或间接通过两个框都绑定到的一些“模型”对象)。

  2. 更新现有实例而不是用新实例替换它(您可以简单地为字段分配值,或创建一些“AssignFrom(其他)”方法等)

  3. 给自己一些其他更有序的方式来通知控件其基础数据源已更改/应该更改。

于 2010-08-24T13:59:29.977 回答