zoukankan      html  css  js  c++  java
  • Windows Phone 使用Sterling数据库实现墓碑化(Tombstone)[zhuan]

    如果你的WP应用已经使用了Sterling数据库,那就顺便用Sterling实现墓碑化(Tombtsone)吧。Jeremy Likness的blog详细说明了如何在MVVM架构中使用Sterling实现Tombstone。主要有几点:

    1. 定义一个Tombstone数据类。其中用到了Sterling User Guide中提到的Singletone Serialization

    public class TombstoneModel
    {
        public TombstoneModel()
        {
            State = new Dictionary<string, object>();
        }
        public Dictionary<string, object> State { get; set; }
        public T TryGet<T>(string key, T defaultValue)
        {
            if (State.ContainsKey(key))
            {
                return (T)State[key];
            }
            return defaultValue;
        }
    }

    2. 定义一个ITombstoneable接口。其中有Active与Deactive方法,分别于view的NavigatedTo方法,NavigatedFrom方法中调用。

    在Deactive方法中保存Tombstone数据类到数据库,在Active方法中取出Tombstone数据, 用于恢复view model的状态。

    3. 在需要Tombstone的view model上实现该接口

    很多情况下,View Model需要View Loaded之后才可工作,Jeremy使用了一个匿名事件处理在Loaded之后执行Active方法。

    public static void ActivatePage(this PhoneApplicationPage phonePage, IViewModel viewModel)
    {
        RoutedEventHandler loaded = null;
        loaded = (o, e) =>
                        {                             
                            ((PhoneApplicationPage) o).Loaded -= loaded;
                            if (viewModel is ITombstoneFriendly)
                            {
                                ((ITombstoneFriendly) viewModel).Activate();
                            }
                        };
        phonePage.Loaded += loaded;
    }
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        this.ActivatePage(GlobalManager.GetViewModel<IMainViewModel>());
        base.OnNavigatedTo(e);
    }

    此外,Sterling目前还不支持IList的序列化,Active之后会发现该集合的项目均为null,讨论组中提到了这个问题,可用List代替而解决。

  • 相关阅读:
    Unity在协程内部停止协程自身后代码执行问题
    unity如何停止不用字符串方式开启协程的方法
    解决导入protobuf源代码Unity报错的问题
    FastCGI模式编译安装LAMP+Xcache
    Apache配置防盗链
    Apache配置日志切割
    Apache配置参数的优化
    Apache三种工作模式详解
    隐藏Nginx、Apache、PHP的版本号
    配置Apache控制浏览器端的缓存的有效期
  • 原文地址:https://www.cnblogs.com/Yukang1989/p/2818588.html
Copyright © 2011-2022 走看看