2012-04-18 21 views
0

私はDataPagerを持っていて、それがページで取り込まれると、nullreferenceexceptionをスローします。それはちょっと変わったものでした。なぜなら、データがほとんどまたはまったくなくても、何も投げていないからです。私のコードはここにある:なぜDataPager.GetVisualDescendants()は結果を返しませんか?

private void dataPager_PageIndexChanged(object sender, System.EventArgs e) 
    { 
     if ((sender as DataPager).Visibility == System.Windows.Visibility.Visible) 
     { 
      if ((sender as DataPager).PageIndex == (sender as DataPager).PageCount - 1) 
      { 
       (sender as DataPager).GetVisualDescendants().OfType<Button>().Where(b => b.Name == "NextPageButton").SingleOrDefault().IsEnabled = false; 
      } 
      else 
       (sender as DataPager).GetVisualDescendants().OfType<Button>().Where(b => b.Name == "NextPageButton").SingleOrDefault().IsEnabled = true; 
     } 
    } 

私は取得しない何dataPagerが4ページに到達したときに.GetVisualDescendants(DataPagerとして送信者)()の結果ビューには何も結果が得られていないんなぜですか?ご覧のように、ビジュアル子孫を取得するためにVisibleであるかどうかをチェックしています。このコードはpageindexchangedイベントにあるため、データページャがロードされるとすぐに起動します。これについて何か考えていますか?どんな助けでも大歓迎です。ありがとう!

答えて

0

答えは、ページが2回更新されたことです。 Dunnoなぜ、Silverlightは、datapagerがロードされロードされたときにpageindexchangedを発生させるようです。だから、このコードを2度実行します。私がしたのは、GetVisualDescendants()をカウントする行が追加されました。Count!= 0そしてすべてがうまくいっていました。

private void dataPager_PageIndexChanged(object sender, System.EventArgs e) 
{ 

    if ((sender as DataPager).Visibility == System.Windows.Visibility.Visible) 
    { 
     if((sender as DataPager).GetVisualDescendants().Count != 0) 
     { 
      if ((sender as DataPager).PageIndex == (sender as DataPager).PageCount - 1) 
      { 
      (sender as DataPager).GetVisualDescendants().OfType<Button>().Where(b => b.Name == "NextPageButton").SingleOrDefault().IsEnabled = false; 
      } 
      else 
      (sender as DataPager).GetVisualDescendants().OfType<Button>().Where(b => b.Name == "NextPageButton").SingleOrDefault().IsEnabled = true; 
     } 
    } 
} 
関連する問題