0

私は DataPager を持っています。ページが読み込まれると、nullreferenceexception がスローされます。データがほとんどまたはまったくないときは何もスローされないので、ちょっと奇妙でした。私のコードはここにあります:

  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 ページに達したときに (sender as DataPager).GetVisualDescendants() の結果ビューが結果を返さないのはなぜですか? ご覧のとおり、視覚的な子孫を取得するために Visible であるかどうかを既に確認しており、このコードは pageindexchanged イベントにあるため、datapager が読み込まれるとすぐに起動します。これについて何か考えはありますか?どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

答えは、pageindexchanged を 2 回起動することでした。理由はわかりませんが、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;
       }
   }
}
于 2012-04-19T00:32:16.400 に答える