2013-10-08 3 views
1

Я нахожусь в приложении для магазина Windows 8. В этом проекте. Мне нужно отправить данные на другую страницу. План состоит в том, что у меня есть ItemGridView в MainPage.xaml, я щелкаю изображение новостей, и мне нужно отправить идентификатор этой новости на следующую страницу и создать статью с этим идентификатором.ItemGridView ItemClick в приложении Windows Store

Я сделал это приложение для Windows 8 с этим;

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

В приложении win store я стараюсь;

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 смотрите ниже в визуальной студии, когда я отладки ниже, он получает идентификатор, но, когда я иду вперед, он говорит: «Значение не может быть пустым. Имя параметра: ключ« и перемещает »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); 
    } 

Я добавил вызов метода OnNavigatedTo из LayoutAwarePage

+0

Это для BasicPage1 вправо? –

+0

нет этого кода у вас есть на главной странице – Manvik

+0

"base.OnNavigatedTo (e);" не хватало .. Была ли это вся проблема ..? Спасибо, брату. –

Смежные вопросы