Сохраняйте двустороннюю привязку, когда весь объект изменился - PullRequest
0 голосов
/ 24 августа 2010

У меня есть класс:

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

Я могу создать экземпляр и привязать два TextBox к объекту:

    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 голос
/ 24 августа 2010

Ваши текстовые поля содержат ссылку на первый экземпляр созданного вами объекта.Теперь вы создаете второй экземпляр, предположительно для того, чтобы заменить существующий экземпляр, но текстовые поля не знают об этом изменении.

Вам необходимо:

  1. Передайте новый экземпляр в текстовые поля (напрямую, как вы назначили первый экземпляр, или косвенно, имея некоторый объект "Модель", с которым связаны оба блока).существующий экземпляр вместо его замены новым (вы можете просто присвоить значения полям или создать метод AssignFrom (other) и т. д.)

  2. Получить себе другие- более упорядоченный - способ уведомления элементов управления о том, что их базовый источник данных изменился / должен быть изменен.

...