2012-04-14 62 views
0

我在使用下面的代码从我的RSS阅读器尝试导航回到前面的MainPage.xaml时收到空引用异常。有人可以帮助我建议我需要做什么来避免这个错误?WP7 NullReferenceException在导航上返回

public partial class FeedDetailsPage : PhoneApplicationPage 
{ 
    object _selectedFeedItem; 
    object _selectedFeed; 

    public FeedDetailsPage() 
    { 
     InitializeComponent(); 
     Loaded += new RoutedEventHandler(PhoneApplicationPage_Loaded); 
     LoadFeed(); 
    } 

    private void LoadFeed() 
    { 
     FrameworkElement root = Application.Current.RootVisual as FrameworkElement; 
     var currentFeed = root.DataContext as ATP_Tennis_App.ViewModels.FeedViewModel; 
     WebClient wc = new WebClient(); 
     wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 
     wc.DownloadStringAsync(new Uri(currentFeed.FeedUrl)); 
     _selectedFeed = currentFeed; 
    } 

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     // if (e.Error != null) { return; } 

     var rssFeed = XElement.Parse(e.Result); 

     var currentFeed = this.DataContext as ATP_Tennis_App.ViewModels.FeedViewModel; 
     var items = from item in rssFeed.Descendants("item") 

        select new ATP_Tennis_App.ViewModels.FeedItemViewModel() 
        { 

         Title = item.Element("title").Value, 
         DatePublished = DateTime.Parse(item.Element("pubDate").Value), 
         Url = item.Element("link").Value, 
         Description = item.Element("description").Value 
        }; 
     foreach (var item in items) 
      currentFeed.Items.Add(item); 

    } 

    private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     // Cancel default navigation 

     e.Cancel = true; 
     PhoneApplicationFrame root = (PhoneApplicationFrame)Application.Current.RootVisual; 
     root.GoBack(); 



    } 


    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     this.DataContext = _selectedFeed; 
    } 



    private void lstFeeds_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     _selectedFeedItem = (sender as ListBox).SelectedItem; 
     NavigationService.Navigate(new Uri("/FeedItemDetailsPage.xaml", UriKind.Relative)); 
     FrameworkElement root = Application.Current.RootVisual as FrameworkElement; 
     root.DataContext = _selectedFeedItem; 
    } 


} 

抛出异常上线

wc.DownloadStringAsync(new Uri(currentFeed.FeedUrl)); 
+0

什么是您的完整异常堆栈跟踪?哪一行代码正在抛出NRE? – ColinE 2012-04-14 06:20:44

+0

ColinE,我已更新问题以显示抛出异常的行 – 2012-04-24 12:25:40

+0

只是一个猜测:您的currentFeed == null?当根的DataContext为null或不是FeedViewModel时,可能会发生这种情况。你在哪里设置DataContext? – 2012-04-24 12:28:00

回答

0

我已经解决了这一点。该错误在我的MainPage脚本中。我已将datacontext设置移到主脚本中,现在不再抛出错误