/// <summary>
 /// Preserves state associated with this page in case the application is suspended or the
 /// page is discarded from the navigation cache.  Values must conform to the serialization
 /// requirements of <see cref="SuspensionManager.SessionState"/>.
 /// </summary>
 /// <param name="pageState">An empty dictionary to be populated with serializable state.</param>
 protected virtual void SaveState(Dictionary <String, Object> pageState)
 {
     if (this.DataContext != null && this.DataContext is IStateAware)
     {
         IStateAware state = (IStateAware)this.DataContext;
         state.SaveState(pageState);
     }
 }
 /// <summary>
 /// Populates the page with content passed during navigation.  Any saved state is also
 /// provided when recreating a page from a prior session.
 /// </summary>
 /// <param name="navigationParameter">The parameter value passed to
 /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
 /// </param>
 /// <param name="pageState">A dictionary of state preserved by this page during an earlier
 /// session.  This will be null the first time a page is visited.</param>
 protected virtual void LoadState(Object navigationParameter, Dictionary <String, Object> pageState)
 {
     if (this.DataContext != null && this.DataContext is IStateAware)
     {
         IStateAware state = (IStateAware)this.DataContext;
         state.LoadState(navigationParameter, pageState);
     }
 }
 private void Widgets_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
 {
     foreach (IWidget widget in e.NewItems)
     {
         IStateAware stateAware = widget as IStateAware;
         if (stateAware != null)
         {
             stateAware.OnResume();
         }
     }
 }
 private void OnNavigationStart(object sender, NavigationEventArgs e)
 {
     if (e.SourceDescriptor.ViewName == "WidgetView")
     {
         foreach (IWidget widget in Target.Widgets)
         {
             IStateAware stateAware = widget as IStateAware;
             if (stateAware != null)
             {
                 stateAware.OnStop();
             }
         }
     }
 }
 private void OnNavigationCompleted(object sender, NavigationEventArgs e)
 {
     if (e.TargetDescriptor.ViewName == "WidgetView")
     {
         foreach (IWidget widget in Target.Widgets)
         {
             IStateAware stateAware = widget as IStateAware;
             if (stateAware != null)
             {
                 stateAware.OnResume();
             }
         }
     }
 }