2016-07-14 14 views
0

Pivotの項目を持つXAMLページのWindows 10アプリケーションがあり、デフォルトの動作がPivotの場合、Pivotのページに移動するたびに、 Pivotがすぐに選択されます。私がしたいのは、の前にのコードを実行して、Pivotの最初の項目を実行することです。ページが読み込まれるのを待つ -

コンテキストでコードの問題に関連

public sealed partial class ContentFrame : Page 
{ 
    private IMobileServiceTable<News> NewsItems = App.MobileService.GetTable<News>(); 

    private List<News> AllNews; 

    private List<News> Windows = new List<News>(); 
    private List<News> Apple = new List<News>(); 
    private List<News> Google = new List<News>(); 
    private List<News> Other = new List<News>(); 
    private List<News> Top = new List<News>(); 

    private string WeekID; 

    public ContentFrame() 
    { 
     this.InitializeComponent(); 
    } 

    protected override async void OnNavigatedTo(NavigationEventArgs e) 
    { 
     WeekID = e.Parameter as string; 
     AllNews = await NewsItems.Where(News => News.Week == WeekID).ToListAsync(); 
     separateContent(); 
    } 

    private void separateContent() 
    { 
     foreach (News item in AllNews) 
     { 
      Debug.WriteLine(item.Tag); 
      if (item.Tag == "Windows") 
       Windows.Add(item); 
      else if (item.Tag == "Apple") 
       Apple.Add(item); 
      else if (item.Tag == "Google") 
       Google.Add(item); 
      else if (item.Tag == "Other") 
       Other.Add(item); 
      else 
       Top.Add(item); 
     } 
    } 

    private void Tags_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     IntroHead.FontWeight = FontWeights.Normal; 
     WindowsHead.FontWeight = FontWeights.Normal; 
     AppleHead.FontWeight = FontWeights.Normal; 
     GoogleHead.FontWeight = FontWeights.Normal; 
     OtherHead.FontWeight = FontWeights.Normal; 

     switch (Tags.SelectedIndex) 
     { 
      case 0: 
       IntroHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(TopNewsPage), Top); 
       break; 
      case 1: 
       WindowsHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(OtherNews), Windows); 
       break; 
      case 2: 
       AppleHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(OtherNews), Apple); 
       break; 
      case 3: 
       GoogleHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(OtherNews), Google); 
       break; 
      case 4: 
       OtherHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(OtherNews), Other); 
       break; 
     } 
    } 
} 

コード行:

StoryContent.Navigate(typeof演算(TopNewsPage)、トップ)。

は、これはあまりにも早く実行し、私はseparateContent();方法は、私はアプリは私のXAMLレイアウト上Pivotコントロールをナビゲートすることができ前に実行されるまで待機します。私がそうでなければ、(Top)に渡されたパラメータはnull /空になり、私のアプリケーションはTopNewsPageに移動するとすぐに例外をスローします。

どうすればいいですか?

私は自分のアプリを作っている方法が最善のものではないことを理解しています(MVVMは私が将来探求しようとしているものです)。これは私の最初のアプリであり、 。私はTaskで少し調べましたが、Pivotナビゲーションが速すぎるため、何も私の原因を助けてくれないようです。

+0

なぜ、 'InitializeComponent()'の後に 'separateContent();'を呼び出さないのですか? –

+0

良い質問です。私は 'OnContent();'を呼び出す前に 'OnNavigatedTo'メソッドのパラメータで渡された' WeekID'を必要としますので、私の場合は動作しません。 – CStruggle

答えて

0

注:私はこれが私の問題の良い解決策ではないと考えていますが、それは機能するものです。ここで

は私がやったことです:それListが空の場合は何も実行しないように

  1. Tags_SelectionChangedTop.Countのチェックを追加しました。 separateContent();の端部におけるコードの
  2. 追加した2つのラインTopそれの項目を一旦Iは、第Pivot項目を実行するように。

あなたがこれを行うには良い方法を持っている場合は、それを共有して下さい!

private void separateContent() 
    { 
     foreach (News item in AllNews) 
     { 
      Debug.WriteLine(item.Tag); 
      if (item.Tag == "Windows") 
       Windows.Add(item); 
      else if (item.Tag == "Apple") 
       Apple.Add(item); 
      else if (item.Tag == "Google") 
       Google.Add(item); 
      else if (item.Tag == "Other") 
       Other.Add(item); 
      else 
       Top.Add(item); 
     } 
     IntroHead.FontWeight = FontWeights.SemiBold; 
     StoryContent.Navigate(typeof(TopNewsPage), Top); 
    } 

    private void Tags_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (Top.Count < 6) 
      return; 
     IntroHead.FontWeight = FontWeights.Normal; 
     WindowsHead.FontWeight = FontWeights.Normal; 
     AppleHead.FontWeight = FontWeights.Normal; 
     GoogleHead.FontWeight = FontWeights.Normal; 
     OtherHead.FontWeight = FontWeights.Normal; 

     switch (Tags.SelectedIndex) 
     { 
      case 0: 
       IntroHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(TopNewsPage), Top); 
       break; 
      case 1: 
       WindowsHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(OtherNews), Windows); 
       break; 
      case 2: 
       AppleHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(OtherNews), Apple); 
       break; 
      case 3: 
       GoogleHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(OtherNews), Google); 
       break; 
      case 4: 
       OtherHead.FontWeight = FontWeights.SemiBold; 
       StoryContent.Navigate(typeof(OtherNews), Other); 
       break; 
     } 
    } 
0

はコメントの中で、あなたは主にあなたがTags_SelectionChangedが仕事をしたいとWeekIDOnNavigatedToイベントに設定される前に、WeekIDが第1の値を持つようにしたいと述べました。 WeekIDがまだ設定されていない限り、Tags_SelectionCHangedイベントで何もしないことをお勧めします。

試してみてください。これはあなたのために働く場合

private void Tags_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if(string.IsNullOrEmpty(WeekID)) 
     return; 

    IntroHead.FontWeight = FontWeights.Normal; 
    WindowsHead.FontWeight = FontWeights.Normal; 
    AppleHead.FontWeight = FontWeights.Normal; 
    GoogleHead.FontWeight = FontWeights.Normal; 
    OtherHead.FontWeight = FontWeights.Normal; 

    switch (Tags.SelectedIndex) 
    { 
     case 0: 
      IntroHead.FontWeight = FontWeights.SemiBold; 
      StoryContent.Navigate(typeof(TopNewsPage), Top); 
      break; 
     case 1: 
      WindowsHead.FontWeight = FontWeights.SemiBold; 
      StoryContent.Navigate(typeof(OtherNews), Windows); 
      break; 
     case 2: 
      AppleHead.FontWeight = FontWeights.SemiBold; 
      StoryContent.Navigate(typeof(OtherNews), Apple); 
      break; 
     case 3: 
      GoogleHead.FontWeight = FontWeights.SemiBold; 
      StoryContent.Navigate(typeof(OtherNews), Google); 
      break; 
     case 4: 
      OtherHead.FontWeight = FontWeights.SemiBold; 
      StoryContent.Navigate(typeof(OtherNews), Other); 
      break; 
    } 
} 

は、あなたが別のページに移動する前に、またはページが閉じたとき、私は知らないので、イベントにnullまたは空のためにWeekIDを設定することをお勧めしますContentFrameがそのようなイベントでWeekIDの値を保持する場合ただのヒント。

+0

助けてくれてありがとうが、これは私の問題を解決するのに役立ちません。まず、実際に 'If(Top.Count == 0)return;'を試してみましたが、 'WeekID'を検証するのではなく、最後には例外を回避しますが、ページをロードしません。 'Pivot'アイテムを別のものに切り替えてから、' TopNews.xaml'を正しくロードする必要があります。私は停止し、 'Top.Count!= 0'までデフォルトのナビゲーションを待つ何かが必要です。あなたの解決策は待たずに、 'Pivot'アイテムを再ロードする必要があります。 – CStruggle

関連する問題