2010-08-24 3 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 

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

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

Теперь я могу изменить TextBoxes или объект:

MyObject.Two = 3 

... объект и текстовые поля обновляются двумя способами.

Теперь я хочу, чтобы обновить весь объект:

MyObject = New TestClass(3, 4) 

... но это не обновляет TextBoxes.

Что я делаю неправильно?

ответ

1

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

Вам нужно либо:

  1. Пропустите новый экземпляр в текстовые поля (прямо, как вы назначены первый экземпляр, или косвенно, имея некоторую «модель» объекта, что обе коробки связаны с) ,

  2. Обновление существующего экземпляра вместо того, чтобы заменить его на новый (можно просто присвоить значения полей, или создать какой-то «(другое) AssignFrom» метод и т.д.)

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

Смежные вопросы