基于多态的墓碑化
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来实现,会让代码更加整洁。个人随想,求高手指教