2010-08-24 5 views
0

J'ai une classe:Gardez les deux sens obligeraient objet entier a changé

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 

Je peux créer une instance et lier deux zones de texte à l'objet:

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

Maintenant je peux changer la TextBoxes ou l'objet:

MyObject.Two = 3 

..l'objet et TextBoxes sont mis à jour de deux façons.

Maintenant, je veux mettre à jour l'objet entier:

MyObject = New TestClass(3, 4) 

... mais cela ne met pas à jour les zones de texte.

Qu'est-ce que je fais mal?

Répondre

1

Vos zones de texte contiennent une référence à la première instance de l'objet que vous avez créé. Vous créez maintenant une seconde instance, supposément pour remplacer l'instance existante, mais les zones de texte ne sont pas conscientes du changement.

a besoin de vous soit:

  1. passer le nouvelle instance aux zones de texte (directement, comme vous avez attribué la première instance, ou indirectement en ayant un objet « modèle » que les deux boîtes sont liés à) .

  2. Mise à jour l'instance existant au lieu de le remplacer par un nouveau (vous pouvez simplement attribuer des valeurs aux champs, ou créer une « Attribuerdans (autre) » méthode, etc.)

  3. Procurez-vous un autre - plus ordonnée - façon de notifier les contrôles que leur source de données sous-jacente a changé/devrait être changée.

Questions connexes