为什么DataPager.GetVisualDescendants()不返回任何结果?

时间:2012-04-18 06:26:45

标签: c# silverlight

我有一个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)的结果视图.GetVisualDescendants()在dataPager达到4页时没有结果?正如您所看到的,我已经检查过它是否可见以获取可视后代,并且此代码位于pageindexchanged事件上,因此一旦加载数据页,它就会触发。对这个有什么想法吗?任何帮助将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

答案是它触发了pageindexchanged两次。 Dunno为什么,但是当datapager加载和加载时,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;
       }
   }
}