AngelGong 发表于 2012-12-22 02:48:25

基于多态的墓碑化

<div id="cnblogs_post_body">
1. 一个墓碑化接口
interface ITombstone : IDisposable
    {
      /// <summary>
      /// 墓碑化
      /// </summary>
      /// <returns></returns>
      bool Tombstone();
      /// <summary>
      /// 从墓碑化恢复
      /// </summary>
      /// <returns></returns>
      bool ResumeFromTombstone();
    }

2. 一个拥有ITombstone 句柄的BasePage
public class BasePage : PhoneApplicationPage
    {
      private ITombstone NavigateContext = null;
      /// <summary>
      /// 在页面导航的时候墓碑化
      /// </summary>
      /// <param name="e"></param>
      protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
      {
            //考虑到不是所有的页面的DataContext都是有值,最好判断一下
            if (NavigateContext == null && DataContext != null)
            {
                NavigateContext = DataContext as ITombstone;
                NavigateContext.Tombstone();
            }
            base.OnNavigatingFrom(e);
      }
      protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
      {
            ///从墓碑化恢复
            ///IsFromResume这个值当然是在应用激活的时候设置为true的了
            if (StateUtilities.IsFromResume)
            {
                if (NavigateContext == null)
                {
                  NavigateContext = DataContext as ITombstone;
                }
                NavigateContext.ResumeFromTombstone();
                ///如果页面之间没有很强的数据耦合,下面这句话就可以执行了,从我们应用中总结的
               // StateUtilities.IsFromResume = false;
            }
            base.OnNavigatedTo(e);
      }
    }
3. 所有的页面继承自BasePage,所有的ViewModel实现ITombstone 接口
总结:为了让应用的简单架构更加统一,可以在有一个IViewModel接口,里面有LoadSave Edit Delete等函数。让所有的ViewModel来实现,会让代码更加整洁。个人随想,求高手指教
页: [1]
查看完整版本: 基于多态的墓碑化