2008-11-11 4 views
0

ici est mon exemple de code:comment passer un événement d'un objet enfant dans une liste générique au parent?

Public Class Parent 
    Private _TestProperty As String 
    Private WithEvents _Child As IList(Of Child) 

    Public Property Test() As String 
     Get 
      Return _TestProperty 
     End Get 
     Set(ByVal value As String) 
      _TestProperty = value 
     End Set 
    End Property 

    Public Property Child() As IList(Of Child) 
     Get 
      Return _Child 
     End Get 
     Set(ByVal value As IList(Of Child)) 
      _Child = value 
     End Set 
    End Property 

    Private Sub eventHandler Handles _Child 
End Class 

Public Class Child 
    Private _TestProperty As String 
    Public Event PropertyChanged As EventHandler 

    Friend Sub Notify() 
     RaiseEvent PropertyChanged(Me, New EventArgs()) 
    End Sub 

    Public Property Test() As String 
     Get 
      Return _TestProperty 
     End Get 
     Set(ByVal value As String) 
      _TestProperty = value 
      Notify() 
     End Set 
    End Property 
End Class 

Comment puis-je gérer l'événement soulevée par l'un des de l'objet enfant `s de parent? en utilisant withevents sur l'objet _child ne me donne que les événements de l'objet List (of T).

tia

Répondre

1

Si je vous, j'implémenteriez IList à Parent à l'aide d'une liste dactylographiée agrégée, mais souscrivant à des événements d'enfants sur IList.Add et unsubscibing sur Supprimer. Quelque chose comme ça (désolé pour la syntaxe C#).

class Child 
{ 
    public event EventHandler MyEvent; 
} 

class Parent : IList<Child> 
{ 
    List<Child> _list; 

    // IList implementation 
    // ... 
    public void Add(Child item) 
    { 
    item.MyEvent += _ParentChildEventHandler; 
    _list.Add(item); 
    } 

    public void Remove(Child item) 
    { 
    item.MyEvent -= _ParentChildEventHandker; 
    _list.Remove(item); 
    } 

    void _ParentChildEventHandler(object sender, EventArgs e) 
    { 
    Child child = (Child)sender; 

    // write your event handling code here 
    } 
} 
+0

thx, cette méthode fonctionne. @ C# syntax np je suis habitué à traduire des exemples C# en vb.net :) –

Questions connexes