Передайте параметр в ApplicationBarIconButton.Click - PullRequest
0 голосов
/ 29 сентября 2011

* Привет всем, Я новичок в 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 кнопки. Как это возможно? Спасибо

Ответы [ 3 ]

2 голосов
/ 29 сентября 2011

Я был побит этим @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);
        };
    }

Cheers, Al.

0 голосов
/ 30 сентября 2011

Интегрированный способ достижения этого - использование команд в инфраструктурах MVVM. С кнопками / элементами меню панели приложения это немного сложнее, но гораздо более гибко, чем манипулирование элементами пользовательского интерфейса на странице.

Посмотрите на свет MVVM (http://mvvmlight.codeplex.com) или далее, например Calburn.Micro (http://caliburnmicro.codeplex.com/)

)

Для привязки данных панели приложения вам нужно будет гуглить дальше (потерял ссылку в МО)

0 голосов
/ 29 сентября 2011

Вы можете сделать это:

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

Вместо вызова метода для обработки клика вы можете использовать лямбду и по-прежнему получать доступ к i (через локальную копию i2). Затем вы можете вызвать любой метод, передавая i2 в качестве параметра, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...