0

作成しているWindowsPhone7.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」を含むクラスファイルを介してここに入力されます。ただし、前述のように、リストボックスとそのDataTemplateの内部には、次のボタンがあります。

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

このボタンは、最初のコードスニペットを介して、各アイテムのnews_idに移動する必要があります。これは、パブリックゲッターとセッターを処理するクラスファイル内の文字列です。

したがって、ここでの私の夢のシナリオは、コードビハインドで、webClient_DownloadString ...()内に次のようなものになります。

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

そこから、リストボックス内の各ニュースアイテムには、「TheNewPage」ページで取得されるnews_idを示すパラメータを持つ個別のボタンがあります。

これは実際に機能しますか?

4

2 に答える 2

3

まず、ボタンコントロールには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のルートに配置したものすべてのtapイベントを処理します(GridまたはStackPanelだと思います)。

于 2013-02-27T09:39:29.523 に答える