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;
        }
    }

我不明白为什么 (sender as DataPager).GetVisualDescendants() 的结果视图在 dataPager 达到 4 页时没有产生任何结果?正如你所看到的,我已经检查了它是否是 Visible 用于获取视觉后代,并且此代码在 pageindexchanged 事件上,因此它会在加载数据分页器时立即触发。对这个有什么想法吗?任何帮助将非常感激。谢谢!

4

1 回答 1

0

答案是它会触发 pageindexchanged 两次。不知道为什么,但是当数据分页器正在加载和加载时,Silverlight 似乎触发了 pageindexchanged。所以它会触发这段代码两次,我所做的只是添加了一行来检查 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 回答