*大家好, 我是WP7 dev的新手。 (我习惯在android上工作)并且有一个基本的东西,我不知道该怎么做。 我用编程方式创建了一个ApplicationBarIconButton列表:
for (int i=0; i<menus.Count(); i++)
{
ApplicationBarIconButton button = new ApplicationBarIconButton();
button.IconUri = new Uri(menus.ElementAt(i).Element("ImageUrl").Value.Trim(),UriKind.Relative);
button.Text = menus.ElementAt(i).Element("Title").Value.Trim();
button.Click += new EventHandler(button_clicked);
ApplicationBar.Buttons.Add(button);
}
我希望button_clicked方法可以检索按钮的i值。 这怎么可能? 感谢
答案 0 :(得分:2)
我被@Enigmativity殴打,但他的回答可能仍然不正确。根据我的经验,我发现您需要克隆迭代i
变量,否则在点击事件中,i
将是最后一个值。如果他不起作用,试试这个(再次使用lamba函数)
for (int i=0; i<menus.Count(); i++){
ApplicationBarIconButton button = new ...
...
var cloned = i;
button.Click += (sender, e) => {
sometTextBlock.Text = String.Format("App Button {0} pressed.", cloned);
};
}
干杯, 人
答案 1 :(得分:0)
你可以这样做:
for (int i=0; i<menus.Count(); i++)
{
ApplicationBarIconButton button = new ApplicationBarIconButton();
button.IconUri = new Uri(menus.ElementAt(i).Element("ImageUrl").Value.Trim(),UriKind.Relative);
button.Text = menus.ElementAt(i).Element("Title").Value.Trim();
var i2 = i; //Thanks to `ajmccall` - I forgot this.
button.Click += (s, e) =>
{
// the variable `i2` is accessible now.
};
ApplicationBar.Buttons.Add(button);
}
不是调用方法来处理点击,而是可以使用lambda并仍然可以访问i
(通过本地副本i2
)。然后,如果需要,您可以调用任何传递i2
的方法作为参数。
答案 2 :(得分:0)
实现这一目标的一种综合方法是通过在MVVM框架中使用命令。 使用应用栏按钮/菜单项时,它比操作页面上的UI元素更棘手但更灵活。
查看MVVM指示灯(http://mvvmlight.codeplex.com)或进一步了解Calburn.Micro(http://caliburnmicro.codeplex.com/)
对于应用程序栏数据绑定,您需要进一步谷歌(在mo处丢失链接)