// NOTE: The code in all three pages is identical.
 /// <summary>
 /// Handler for the DownloadStatusChanged event
 /// </summary>
 /// <param name="sender">The main ViewModel</param>
 /// <param name="e">Args</param>
 void ViewModel_DownloadStatusChanged(object sender, DownloadStatusChangedEventArgs e)
 {
     // This comes in on a background thread...
       Dispatcher.BeginInvoke(delegate
       {
     if (e.IsComplete)
     {
       // Stop loading animation, hide the text, and make the list fully opaque
       loadingAnimation.Stop();
       loadingText.Visibility = Visibility.Collapsed;
       MainListBox.Opacity = 1;
     }
     else
     {
       loadingText.Text = e.Message;
     }
       });
 }
        // NOTE: The code in all three pages is identical.
        /// <summary>
        /// Handler for the DownloadStatusChanged event
        /// </summary>
        /// <param name="sender">The main ViewModel</param>
        /// <param name="e">Args</param>
        void ViewModel_DownloadStatusChanged(object sender, DownloadStatusChangedEventArgs e)
        {
            // This comes in on a background thread...
              Dispatcher.BeginInvoke(delegate
              {
            if (e.IsComplete)
            {
              // Stop loading animation, hide the text, and make the list fully opaque
              loadingAnimation.Stop();
              loadingText.Visibility = Visibility.Collapsed;
              MainListBox.Opacity = 1;

              object dummy;
              if (State.TryGetValue("scrollOffset", out dummy))
            MainListBox.SetVerticalScrollOffset((double)dummy);
            }
            else
            {
              loadingText.Text = e.Message;
            }
              });
        }