ListBox中的按钮从JSON发送参数

时间:2013-02-27 08:27:49

标签: json silverlight windows-phone-7 xaml webclient

在我正在创建的Windows Phone 7.5应用程序中,我遇到了将导航服务绑定到按钮的问题。该按钮位于XAML中的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;
    }

这里通过上面的代码填充了NewsList列表框,以及包含“getters”和“setters”的类文件。但是,如前所述,在ListBox内部和它的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来自那里列表框中的每个新闻项都有一个单独的按钮,其中有一个参数,说明它有哪个news_id,将在“TheNewPage”页面上提取。

这实际上有用吗?

2 个答案:

答案 0 :(得分:3)

首先,Button控件没有任何NavigationService。为了导航到新页面,您需要调用NavigationService.Navigate()方法

所以,我要做的是将id绑定到Button的Tag

<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 :(得分: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或StackPanel)。