Windows Phone - 使用Sterling数据库实现墓碑化(Tombstone)

本文介绍了如何在MVVM架构中使用Sterling库实现墓碑化(Tombstone)功能,包括定义Tombstone数据类、ITombstoneable接口以及在需要Tombstone的viewmodel上的应用。同时,文中还提到了Sterling当前不支持IList序列化的限制及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你的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代替而解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值