基于多态的墓碑化
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接口,里面有Load Save Edit Delete等函数。让所有的ViewModel来实现,会让代码更加整洁。个人随想,求高手指教
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号