2011-09-29 153 views
0

*大家好,我是WP7開發新手。 (我習慣在android上工作),並且有一個基本的東西,我不知道該怎麼做。 創建編程ApplicationBarIconButton列表與此:將參數傳遞給ApplicationBarIconButton.Click

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值。 這怎麼可能? 感謝

回答

2

我被@Enigmativity毆打了,但他的回答可能仍然不正確。根據我的經驗,我發現你需要克隆迭代的i變量,否則在點擊事件中,i將是最後一個值。如果他不工作試試這個(再次使用蘭巴功能)

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

乾杯, 鋁。

+0

謝謝你趕上我。感到愚蠢。 : -/ – Enigmativity

+0

非常感謝LOT ajmccall! – VinceFR

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作爲參數的方法。

0

實現此目的的一種集成方式是通過使用MVVM框架中的命令。 與應用程序欄按鈕/菜單項授予它有點棘手,但比操縱頁面上的UI元素更加靈活。

查找範圍到MVVM光(http://mvvmlight.codeplex.com)或進一步與Calburn.Micro的喜歡(http://caliburnmicro.codeplex.com/)

對於應用程序欄的數據綁定你將需要進一步谷歌(在鏈接失去了鏈接)