2013-02-26 1 views
1

Я начинающий программист VB.NET, и я пытаюсь реализовать класс Principal с двумя членами, которые являются экземплярами двух разных классов.Autoupdatable свойства в Visual Basic .NET

Как я учусь, как использовать событие и делегат, я хотел бы реализовать мероприятие (если это может быть решением моей проблемы), чтобы обновить objeto2._atributoC21 когда значение присвоить objeto1.atributoC11, а затем обновить Principal.total с суммой все члены object1 и object2.

Вот очень грубый код, но чтобы сделать этот пример ясно, как можно было бы:

Public Class Principal 
    Public objeto1 As ClaseIncluida1 
    Public objeto2 As ClaseIncluida2 
    Public total As Integer 
End Class 

Public Class ClaseIncluida1 
    Private _atributoC11 As Integer 
    Public _atributoC12 As Integer 

    Public Property atributoC11 As Integer 
     Get 
      Return _atributoC11 
     End Get 
     Set(ByVal value As Integer) 
      _atributoC11 = value 
     End Set 
    End Property 
End Class 

Public Class ClaseIncluida2 
    Public _atributoC21 As Integer 
    Public _atributoC22 As Integer 
End Class 

Я знаю, как использовать событие и делегат в простой форме, но когда я пытаюсь сделать то, что Я описал выше, я оказываюсь в тупиковой ситуации.

Возможно, события и делегаты не подходят для класса Principal, но в таком случае, как я мог бы реализовать подходящее решение?

ответ

0

Существует нет автоматического встроенного способа делать такие вещи. Если вы хотите это сделать, вам нужно будет внедрить сантехнику самостоятельно. Стандартный способ сделать это - наличие «дочерних» классов, если хотите, реализовать интерфейс INotifyPropertyChanged. Затем «родительский» класс может прослушивать свои события PropertyChanged. Когда любой из дочерних объектов поднимает это событие, родительский объект может обращаться с ним соответствующим образом. В вашем случае вы хотите обработать его, обновив total. Например:

Public Class Principal 
    Public WithEvents objeto1 As ClaseIncluida1 
    Public WithEvents objeto2 As ClaseIncluida2 
    Public total As Integer 

    Private Sub PropertyChangedHandler(sender As Object, e As PropertyChangedEventArgs) Handles objeto1.PropertyChanged, objeto2.PropertyChanged 
     total = ... 
    End Sub 
End Class 

Public Class ClaseIncluida1 
    Implements INotifyPropertyChanged 

    Private _atributoC11 As Integer 
    Public _atributoC12 As Integer 

    Public Property atributoC11 As Integer 
     Get 
      Return _atributoC11 
     End Get 
     Set(ByVal value As Integer) 
      _atributoC11 = value 
      RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("atributoC11")) 
     End Set 
    End Property 

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged 
End Class 

Public Class ClaseIncluida2 
    Implements INotifyPropertyChanged 

    Public _atributoC21 As Integer 
    Public _atributoC22 As Integer 

    'Implement raising event when properties change 

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged 
End Class