Mon problème est difficile à expliquer, j'ai donc créé un exemple à montrer ici.Comportement étrange lors de l'utilisation de l'expression lambda sur les boutons WPF click event
Lorsque la fenêtre WPF de l'exemple ci-dessous est affichée, trois boutons sont affichés, chacun avec un texte différent. Quand un de ces boutons est cliqué, je suppose que son texte devrait être affiché dans le message, mais à la place, ils affichent tous le même message, comme si tous utilisaient le gestionnaire d'événements du dernier bouton.
public partial class Window1 : Window {
public Window1() {
InitializeComponent();
var stackPanel = new StackPanel();
this.Content = stackPanel;
var n = new KeyValuePair<string, Action>[] {
new KeyValuePair<string, Action>("I",() => MessageBox.Show("I")),
new KeyValuePair<string, Action>("II",() => MessageBox.Show("II")),
new KeyValuePair<string, Action>("III",() => MessageBox.Show("III"))
};
foreach (var a in n) {
Button b = new Button();
b.Content = a.Key;
b.Click += (x, y) => a.Value();
stackPanel.Children.Add(b);
}
}
}
Est-ce que quelqu'un sait ce qui ne va pas?
double possible de [C# Capturé Variable Dans Boucle] (http://stackoverflow.com/questions/271440/c-sharp-captured-variable-in-loop) – nawfal