开发者

Pass a parameter to the ApplicationBarIconButton.Click

*Hi everyone, I'm new in WP7 dev. (i'm used to work on android) and there is a basic thing i don't know how to do. I create programmatically a list of ApplicationBarIconButton with this:

    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);
   Applic开发者_如何转开发ationBar.Buttons.Add(button);
}

and I want that the button_clicked method could retrieve the i value of the button. How is it possible? Thanks


I was beaten to it by @Enigmativity but his answer may still be incorrect. In my experience I've found that you need to clone the iterating i variable, otherwise on the click event, i will be the last value. If his doesn't work try this (again using a lamba function)

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);
        };
    }

Cheers, Al.


You could do this:

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);
}

Rather than calling a method to handle click you can use a lambda and still get access to i (via local copy i2). You could then call any method passing i2 as a parameter if you need to.


An integrated way of achieving this is through the use of commanding in MVVM frameworks. Granted with Application bar buttons / menu items it is a bit more tricky but far more flexible than to manipulate the UI Elements on the page.

Look in to MVVM light (http://mvvmlight.codeplex.com) or further with the likes of Calburn.Micro (http://caliburnmicro.codeplex.com/)

For application bar data binding you will need to google further (lost the link at the mo)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜