0

在我正在创建的 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”页面上获取。

这真的有用吗?

4

2 回答 2

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));
        }
于 2013-02-27T09:03:15.927 回答
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)。

于 2013-02-27T09:39:29.523 回答