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

インスタンスを作成し、2つのTextBoxをオブジェクトにバインドできます。

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

これで、TextBoxまたはオブジェクトを変更できます。

MyObject.Two = 3

..オブジェクトとTextBoxは2つの方法で更新されます。

次に、オブジェクト全体を更新します。

MyObject = New TestClass(3, 4)

...しかし、これはTextBoxを更新しません。

私は何が間違っているのですか?

4

1 に答える 1

1

テキスト ボックスには、作成したオブジェクトの最初のインスタンスへの参照が保持されます。現在、おそらく既存のインスタンスを置き換えるために 2 番目のインスタンスを作成していますが、テキスト ボックスは変更を認識していません。

次のいずれかを行う必要があります。

  1. 新しいインスタンスをテキスト ボックスに渡します (最初のインスタンスを割り当てたときに直接、または両方のボックスがバインドされている "モデル" オブジェクトを持つことで間接的に)。

  2. 新しいインスタンスに置き換えるのではなく、既存のインスタンスを更新します (単純にフィールドに値を代入したり、"AssignFrom (other)" メソッドを作成したりできます)。

  3. 基礎となるデータソースが変更された/変更する必要があることをコントロールに通知する、より整然とした別の方法を自分で取得してください。

于 2010-08-24T13:59:29.977 に答える