2013-02-27 46 views
0

在我創建的Windows Phone 7.5應用程序中,我遇到了將導航服務綁定到按鈕的問題。按鈕處於XAML列表框DataTemplate中,這是從代碼隱藏填充從JSON解串器內:ListBox中的按鈕從JSON發送參數

void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Error != null) 
     { 
      return; 
     } 
     List<JSON> newslistJson = JsonConvert.DeserializeObject<List<JSON>>(e.Result); 

     this.NewsList.ItemsSource = newslistJson; 
    } 

的新聞列表列表框經由上面的代碼,以及包含一個類文件和「吸氣劑」和「在這裏填充二傳手」。然而,列表框裏面,它的DataTemplate中,如前所述,有一個按鈕:

<Button x:Name="toNewsSite" Grid.Row="1" Content="Read More»" Height="auto" Width="auto" FontSize="19" Foreground="#FFFFFF"/> 

這個按鈕應該通過第一代碼片段,導航到每個項目news_id,這是在類的字符串的處理公共getter和setter的文件。

所以在這裏我的夢想的情況是,在代碼隱藏,像這樣的webClient_DownloadString內...():

toNewsSite.NavigateService = ("TheNewPage.xaml/news?id={0}", JSON.news_id); 

AAAND從那裏每個ListBox中的新聞項目將有一個單獨的按鈕並帶有一個參數,說明它擁有哪個news_id,這些參數將在「TheNewPage」頁面中獲取。

這實際上工作嗎?

回答

3

首先,Button控件沒有任何NavigationService。序導航導航到一個新的頁面,你需要調用NavigationService.Navigate()方法

所以,我會做的是對的ID綁定到按鈕

<Button x:Name="toNewsSite" Grid.Row="1" Click="OnButtonClick" Tag="{Binding news_id}" Content="Read More»" Height="auto" Width="auto" FontSize="19" Foreground="#FFFFFF"/> 



private void OnButtonClick(object sender, RoutedEventArgs e) 
     { 
      Button bt = (Button)sender; 
      NavigationService.Navigate(new Uri("TheNewPage.xaml/news?id=" + bt.Tag.ToString(), UriKind.Relative)); 
     } 
+1

我正在輸入相同的答案,並且已經發布了..我剛剛編輯了你的答案:) – nkchandra 2013-02-27 09:27:30

+0

有時會發生,謝謝隊友:) – 2013-02-27 09:35:24

+0

嗯,謝謝!然而,當我嘗試使用這個,應用程序崩潰(指向System.Diagnostics.Debugger.Break();)..我試圖刪除參數等,但它仍然沒有工作。我調試了一些斷點,這裏是一個圖像更多的解釋:http://img.ctrlv.in/512dddc369388.PNG – AndreasB 2013-02-27 10:21:38

1

的標籤在單擊處理程序按鈕搶按鈕的DataContext的,你就可以訪問

private void OnButtonClick(object sender, RoutedEventArgs e) 
{ 
    JSON item = (sender as FrameworkElement).DataContext; 
    NavigationService.Navigate(new Uri("TheNewPage.xaml/news?id=" + item.news_id, UriKind.Relative)); 
} 

作爲進一步的改進,而不是添加一個按鈕的ItemTemplate,我會處理的自來水事件的任何你放在DataTemplate的根目錄下(我猜想一個Grid或StackP ANEL)。