C# 如何向按钮动态添加不同的命令
我想动态地向按钮添加命令。每个按钮都应该使用迭代器变量作为参数执行一个函数。问题是,当按钮文本在按钮上正确显示“0、1、2”时,所有命令都使用迭代器的最终值“SomeCommand(2)”执行。如何让按钮分别执行SomeCommand(0)、SomeCommand(1)和SomeCommand(2)C# 如何向按钮动态添加不同的命令,c#,xamarin.forms,C#,Xamarin.forms,我想动态地向按钮添加命令。每个按钮都应该使用迭代器变量作为参数执行一个函数。问题是,当按钮文本在按钮上正确显示“0、1、2”时,所有命令都使用迭代器的最终值“SomeCommand(2)”执行。如何让按钮分别执行SomeCommand(0)、SomeCommand(1)和SomeCommand(2) public void DynamicButtons() { for(int i = 0; i < 3; i++) { Button newButton = new Butto
public void DynamicButtons()
{
for(int i = 0; i < 3; i++)
{
Button newButton = new Button { Command = new Command(() => { SomeFunction(i); }), Text = i.ToString() };
}
}
public void DynamicButtons()
{
对于(int i=0;i<3;i++)
{
按钮newButton=new按钮{Command=new命令(()=>{SomeFunction(i);}),Text=i.ToString();
}
}
您需要创建循环索引的副本并传递该副本
创建lambda时,它在外部范围中存储对对象的引用,而不是值本身。因此,随着循环的增加,所有内容都有对计数器的引用,因此在执行命令时,所有内容都以值“2”结束
public void DynamicButtons()
{
for(int i = 0; i < 3; i++)
{
var copy = i;
Button newButton = new Button
{
Command = new Command(() =>
{
SomeFunction(copy);
}),
Text = i.ToString()
};
}
}
public void DynamicButtons()
{
对于(int i=0;i<3;i++)
{
var copy=i;
按钮newButton=新按钮
{
命令=新命令(()=>
{
复印件;
}),
Text=i.ToString()
};
}
}
进一步阅读: