0

オブジェクトでもあり、テキストボックスにバインドされているプロパティを持つオブジェクトがあります。MyOriginalObj = MyNewOject を設定して、テキストボックスに新しい値を表示できるようにしたいと思います。これは動作しません。私がしなければならないことは、MyOriginalObj.PropertyA = MyNewObj.PropertyA です。これにより、テキストボックスが更新されます。

実際のクラスには以下のテスト クラスよりも多くのプロパティがあり、すべての更新を行うために必要なコードが増えるため、後者の方法は避けたいと思います。必要に応じて、バインドを解除して新しいオブジェクトにバインドできると思いますが、これもコードを追加することになります。MyOriginalObj = MyNewObj メソッドが最も簡単な解決策ですが、それが可能かどうかはわかりません。お知らせ下さい。

Dim fam As New Family

Public Class Person

    Dim _Age As Integer = 0
    Dim _Name As String = ""

    Public Property Age() As Integer
        Get
            Return _Age
        End Get
        Set(ByVal value As Integer)
            _Age = value
        End Set
    End Property

    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Public Sub New(ByVal age As Integer, ByVal name As String)

        With Me
            ._Age = age
            ._Name = name
        End With

    End Sub

End Class

-

Public Class Family

    Implements System.ComponentModel.INotifyPropertyChanged
    Public Event PropertyChanged(ByVal sender As Object, 
          ByVal e As System.ComponentModel.PropertyChangedEventArgs) _
          Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

    Dim _Father As New Person(0, "")
    Dim _Mother As New Person(0, "")

    Public Property Father() As Person
        Get
            Return _Father
        End Get
        Set(ByVal value As Person)
            _Father = value
            RaiseEvent PropertyChanged(Me, 
                New System.ComponentModel.PropertyChangedEventArgs("Father"))
        End Set
    End Property

    Public Property Mother() As Person
        Get
            Return _Mother
        End Get
        Set(ByVal value As Person)
            _Mother = value
            RaiseEvent PropertyChanged(Me, 
                New System.ComponentModel.PropertyChangedEventArgs("Mother"))
        End Set
    End Property

End Class

-

Private Sub Form1_Load(ByVal sender As System.Object, 
                       ByVal e As System.EventArgs) Handles MyBase.Load

    TextBox1.DataBindings.Add("Text", fam, "Father.Name")
    TextBox2.DataBindings.Add("Text", fam, "Mother.Name")

End Sub

-

Private Sub Button1_Click(ByVal sender As System.Object, 
                          ByVal e As System.EventArgs) Handles Button1.Click

    ' Method A - works, textboxes displays the new values.
    ' fam.Father = New Person(30, "Joe")
    ' fam.Mother = New Person(29, "Jane")
    ' Exit Sub

    ' Method B - does not update textboxes.
    Dim fam2 As New Family
    fam2.Father = New Person(40, "Bob")
    fam2.Mother = New Person(39, "Betty")

    ' I would like the updated properties to be shown in the bound 
    ' textboxes when I set fam = fam2.  Object fam will contain 
    ' the new values but the textboxes will not reflect that.
    fam = fam2
    Console.WriteLine("{0},{1} : {2}, {3}", _
                      fam.Father.Name,  _
                      fam.Father.Age,  _
                      fam.Mother.Name,  _
                      fam.Mother.Age)

End Sub
4

1 に答える 1

0

family探しているものを実現するメソッドをクラス内に実装できます。

Public Class Family

  . . .

  Public Sub ReplaceFamily(newFamily As Family)
    With newFamily
      Me.Father = .Father
      Me.Mother = .Mother
    End With
  End Sub

End Class

呼び出しは次のようになります。

fam.ReplaceFamily(fam2)

に多数のプロパティがある場合は、各プロパティを個別に設定する代わりにfamily、メソッド内でリフレクションを使用できます。ReplaceFamily

于 2012-08-01T22:09:29.590 に答える