2012-04-18 130 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的).GetVisualDescendants的()产生任何结果时DataPager的到达4页?正如你所看到的,我已经检查过它是否为Visible可见的后代,并且这个代码位于pageindexchanged事件中,所以一旦数据加载器被加载,它就会触发。对此有任何想法?任何帮助将非常感激。谢谢!

回答

0

答案是它触发了pageindexchanged两次。不知道为什么,但Silverlight似乎在datapager加载和加载时触发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; 
     } 
    } 
} 
相关问题