2009-05-22 8 views
3

Salut J'essaie de parcourir une liste de boutons personnalisés que j'ai créés. Il appelle un service WCF pour obtenir des informations de la base de données.Passer des paramètres supplémentaires à EventHandler

foreach (LevelButton l in ls) 
{ 
    WayFinderDBService.WayFinderDBServiceClient client = new SilverlightNav.WayFinderDBService.WayFinderDBServiceClient(); 
    client.GetLevelDescriptionCompleted += new EventHandler<SilverlightNav.WayFinderDBService.GetLevelDescriptionCompletedEventArgs>(client_GetLevelDescriptionCompleted); 
    client.GetLevelDescriptionAsync(l.Name);      
} 

Je suis désireux de prendre tout ce qui est de retour de client.GetLevelDescriptionAsync (l.Name); puis passez au bouton, par ex. l.Texte = résultat;

Mon problème est de passer une référence au bouton en tant que paramètre supplémentaire à l'EventHandler. Quelle est la bonne façon de réaliser ce que je veux faire?

Merci

Répondre

1

Il existe deux approches que vous pourriez envisager:

  • Déclarez vos propres données-args type d'événement avec les supplémentaires type délégué/
  • ont une propriété publique sur la classe de collecte qui expose ces données

si GetLevelDescriptionCompletedEventArgs est votre type, alors vous êtes déjà en train de faire le premier - donc juste exposer cette valeur dans l'événement- type d'args; vous pouvez le consommer dans une méthode anonyme:

foreach (LevelButton l in ls) 
{ 
    LevelButton tmp = l; 
    var client=new SilverlightNav.WayFinderDBService.WayFinderDBServiceClient(); 
    client.GetLevelDescriptionCompleted += delegate (object sender, GetLevelDescriptionCompletedEventArgs args) { 
     tmp.Text = args.SomeProperty; // **must** be tmp.Text, not l.Text 
    } 
    client.GetLevelDescriptionAsync(tmp.Name); // or l.Name; same here 
} 

Il y a un problème, bien que - notez le tmp ci-dessus; c'est le fameux numéro foreach/capture.

+0

Salutations pour ce compagnon c'est exactement ce que je recherchais – Marklar

Questions connexes