在Windows Phone页面间传递自定义数据

之前因为需要在页面间传递比字符串、数值更复杂的结构数据,所以写了这么个帮助类,放到了github上。

对外的调用方法:

public static void Go( string pageName, T data, params KeyValuePair[] parameters )
public static T ExtractData( Dictionary queryStrings )

调用形如

class MyData {}

var myData = new MyData();
NavigationHelper.Go( "MyPage.xaml", myData );
myData = NavigationHelper.ExtractData( NavigationContext.QueryString );

具体的数据转换、存储工作在PageDataHandler里面,目前直接调用了Json.Net的序列化功能(简单包装了一层)。现在有两个版本的PageDataHandler,分别用文件和Uri参数存储。

需要注意的是并不是所有类都可以进行序列化——例如.Net自己的Dictionary。所以我又加了一个SerializableSafeModel,作为处理这种情况的基类。里面包含一个可以序列化的Dictionary,接收原始对象和不能序列化的Dictionary作为参数,手动将其转移到可序列化的对象内。

对了,如果想知道为什么还专门给这玩意写篇blog的话,答案就是如果不写,到下周一就会出现连续三篇blog都是介绍稻香村二十四节气时令点心的情况,想想都不能忍。