2013-10-08 146 views
1

我在Windows 8商店应用。在这个项目中。我需要将数据发送到另一个页面。该计划是,我在MainPage.xaml中有一个ItemGridView,点击新闻的图像,并且需要将该新闻的ARTICLE ID发送到下一页,并且必须创建一个带有该ID的文章。ItemGridView ItemClick在Windows应用商店应用

我用这个做了这个windows phone 8应用程序;

private void MainLongListSelectorSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
      NavigationService.Navigate(
       new Uri(
        "/DetailsPage.xaml?selectedIndex=" + 
        ((MyWebApi.Headline) MainLongListSelector.SelectedItem).ARTICLEID, UriKind.Relative)); 
} 

在赢店的应用程序,我试试这个;

private void itemGridView_ItemClick(object sender, ItemClickEventArgs e) 
{ 
      this.Frame.Navigate(typeof (BasicPage1), 
       ((MyWebApi.MainPageHeadline) itemGridView.SelectedItem).ARTICLEID); 
} 

而且我也试过这样;

private void itemGridView_ItemClick(object sender, ItemClickEventArgs e) 
     { 
      var articleid = ((MyWebApi.MainPageHeadline) itemGridView.SelectedItem).ARTICLEID; 

      this.Frame.Navigate(typeof (BasicPage1), articleid); 
     } 

但我得到的

对象引用不设置到对象的实例。

在该行的末尾。

我无法得到这个ID的价值。还有其他建议吗?

谢谢。

UPDATE:

这是MainPage.xaml.cs中;

public sealed partial class MainPage : try012.Common.LayoutAwarePage 
    { 
     private string _json = ""; 
     private MyWebApi.RootObject Headlines { get; set; } 

     public MainPage() 
     { 
      this.InitializeComponent(); 
     } 
     protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) 
     { 

     } 

     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      const string urlt = "MyWebApiURL"; 
      var hWebRequestt = (HttpWebRequest)WebRequest.Create(urlt); 
      hWebRequestt.Method = "GET"; 
      hWebRequestt.BeginGetResponse(MainLongListSelectorLoadCompletedt, hWebRequestt); 
     } 

     private void MainLongListSelectorLoadCompletedt(IAsyncResult ar) 
     { 
      var request = (HttpWebRequest)ar.AsyncState; 
      var response = (HttpWebResponse)request.EndGetResponse(ar); 
      using (var streamReader = new StreamReader(response.GetResponseStream())) 
      { 
       _json = streamReader.ReadToEnd(); 
       Headlines = JsonConvert.DeserializeObject<MyWebApi.RootObject>(_json); 
      } 
      if (Headlines.MainPageHeadline.Count > 0) 

       Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
       { 
        itemGridView.ItemsSource = Headlines.MainPageHeadline.ToList(); 
       }); 
     } 

     private void itemGridView_ItemClick(object sender, ItemClickEventArgs e) 
     { 
      this.Frame.Navigate(typeof(BasicPage1),((MyWebApi.MainPageHeadline)e.ClickedItem).ARTICLEID); 
     } 


    } 

而这是BasicPage1.xaml.cs;

public sealed partial class BasicPage1 : try012.Common.LayoutAwarePage 
    { 
     public BasicPage1() 
     { 
      this.InitializeComponent(); 
     } 

     protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) 
     { 

     } 

     protected override void SaveState(Dictionary<String, Object> pageState) 
     { 
     } 
    } 

回答

3

点击事件将不需要在gridview中选择一个项目,所以有可能你选择的项目为null。试试这个。

private void itemGridView_ItemClick(object sender, ItemClickEventArgs e) 
{ 
    this.Frame.Navigate(typeof (BasicPage1), 
     ((MyWebApi.MainPageHeadline) e.ClickedItem).ARTICLEID); 
} 

注意使用e.ClickedItem这应该是绑定到视觉元素的数据项。

+0

感谢answer.I见下文在Visual Studio时,我下面调试,它得到的ID,但是,当我向前说它“值不能为空。 参数名称:键”并导航“frameState [_pageKey] = pageState;”是否是下一页cs代码的原因?你能帮我解答一下吗 –

+0

@KuthayGümüş你可以分享这两个页面的代码吗?它的这种难以判断这样的 – Manvik

+0

我编辑的问题,检查它。 –

1

试试这个,我希望它会开始工作

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 
     const string urlt = "MyWebApiURL"; 
     var hWebRequestt = (HttpWebRequest)WebRequest.Create(urlt); 
     hWebRequestt.Method = "GET"; 
     hWebRequestt.BeginGetResponse(MainLongListSelectorLoadCompletedt, hWebRequestt); 
    } 

我已经添加了调用LayoutAwarePage的方法的OnNavigatedTo

+0

这是用于BasicPage1的权利? –

+0

您没有此代码是在主页 – Manvik

+0

“base.OnavigatedTo(e);”失踪了......是所有问题..?谢谢兄弟.. –