Windows8 Metro开发 (04) : 保存/读取本地应用程序设置
Josè Mourinho的专栏 http://blog.csdn.net/zyc13701469860转载请注明原作者和出处。
有些时候我们需要保存应用程序的设置,如用户的系统设定。在Android中,我们可以使用sharepreference。在Metro中我们该怎么做呢?
保存/读取基本类型数据
Metro程序会把要保存的数据写入ApplicationData.Current.LocalSettings字典中,并保存在本地。程序在开始运行的时候会从本地初始化该字典。加载之前保存的数据。这样我们就可以方便的保存/读取基本类型数据了。我将其封装成了一个工具类。
默认显示的字体大小为24,我们将其字体改为28后返回到主页面,然后重新进入该页面。你会发现字体的大小变为28了。重新启动程序进入该页面,你会发现字体的大小仍然为28。下拉列表的选中项与字体大小是时刻对应的.
实现方法如下:1.每次进入该页面的时候,首先获取之前保存的字体大小a.没有获取到将字体大小设为默认值b.获取到将字体大小设为获取的值2.用户改变字体大小时,保存改变后的值private static ObservableCollection<Type> GetTypes() { //添加要序列化的类型 if (_Types == null) { _Types = new ObservableCollection<Type>(); _Types.Add(typeof(People)); _Types.Add(typeof(Student)); _Types.Add(typeof(Coder)); } return _Types; }其中_Types是全局对象ObservableCollection<Type>。至此,数据就保存好了。
读取数据读取数据也就是进行反序列化,我们可以得到之前保存的对象集合,其数据类型是List<People>,然后我们将该对象集合交给ListView显示即可。 public static async Task<object> XMLDeserialize(Type type) { StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder; string fileName = "LocalDataPage-list_data.xml"; StorageFile newFile = await folder.GetFileAsync(fileName); Stream newFileStream = await newFile.OpenStreamForReadAsync(); //进行反序列化 DataContractSerializer ser = new DataContractSerializer(type, GetTypes()); object instance = ser.ReadObject(newFileStream); newFileStream.Dispose(); return instance; }可以看到读取的数据与之前保存的相同.我们的目的达到了。
程序运行的效果如下:1.随机显示学生和程序员信息:
2.保存数据保存文件的内容<ArrayOfPeople xmlns="http://schemas.datacontract.org/2004/07/Win8_Study.Pages" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><People i:type="Student"><Age>14</Age><Name>学生1</Name><Score>66</Score></People><People i:type="Coder"><Age>24</Age><Name>程序员2</Name><WorkYears>4</WorkYears></People><People i:type="Student"><Age>7</Age><Name>学生3</Name><Score>86</Score></People><People i:type="Coder"><Age>23</Age><Name>程序员4</Name><WorkYears>1</WorkYears></People><People i:type="Coder"><Age>25</Age><Name>程序员5</Name><WorkYears>2</WorkYears></People></ArrayOfPeople>
3.清除数据并读取之前保存的数据显示效果同第一张图.
专栏网址:http://blog.csdn.net/zyc13701469860/article/details/8194090
转载请注明原作者和出处。
有些时候我们需要保存应用程序的设置,如用户的系统设定。在Android中,我们可以使用sharepreference。在Metro中我们该怎么做呢?
保存/读取基本类型数据
Metro程序会把要保存的数据写入ApplicationData.Current.LocalSettings字典中,并保存在本地。程序在开始运行的时候会从本地初始化该字典。加载之前保存的数据。这样我们就可以方便的保存/读取基本类型数据了。我将其封装成了一个工具类。
默认显示的字体大小为24,我们将其字体改为28后返回到主页面,然后重新进入该页面。你会发现字体的大小变为28了。重新启动程序进入该页面,你会发现字体的大小仍然为28。下拉列表的选中项与字体大小是时刻对应的.
实现方法如下:1.每次进入该页面的时候,首先获取之前保存的字体大小a.没有获取到将字体大小设为默认值b.获取到将字体大小设为获取的值2.用户改变字体大小时,保存改变后的值private static ObservableCollection<Type> GetTypes() { //添加要序列化的类型 if (_Types == null) { _Types = new ObservableCollection<Type>(); _Types.Add(typeof(People)); _Types.Add(typeof(Student)); _Types.Add(typeof(Coder)); } return _Types; }其中_Types是全局对象ObservableCollection<Type>。至此,数据就保存好了。
读取数据读取数据也就是进行反序列化,我们可以得到之前保存的对象集合,其数据类型是List<People>,然后我们将该对象集合交给ListView显示即可。 public static async Task<object> XMLDeserialize(Type type) { StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder; string fileName = "LocalDataPage-list_data.xml"; StorageFile newFile = await folder.GetFileAsync(fileName); Stream newFileStream = await newFile.OpenStreamForReadAsync(); //进行反序列化 DataContractSerializer ser = new DataContractSerializer(type, GetTypes()); object instance = ser.ReadObject(newFileStream); newFileStream.Dispose(); return instance; }可以看到读取的数据与之前保存的相同.我们的目的达到了。
程序运行的效果如下:1.随机显示学生和程序员信息:
2.保存数据保存文件的内容<ArrayOfPeople xmlns="http://schemas.datacontract.org/2004/07/Win8_Study.Pages" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><People i:type="Student"><Age>14</Age><Name>学生1</Name><Score>66</Score></People><People i:type="Coder"><Age>24</Age><Name>程序员2</Name><WorkYears>4</WorkYears></People><People i:type="Student"><Age>7</Age><Name>学生3</Name><Score>86</Score></People><People i:type="Coder"><Age>23</Age><Name>程序员4</Name><WorkYears>1</WorkYears></People><People i:type="Coder"><Age>25</Age><Name>程序员5</Name><WorkYears>2</WorkYears></People></ArrayOfPeople>
3.清除数据并读取之前保存的数据显示效果同第一张图.
专栏网址:http://blog.csdn.net/zyc13701469860/article/details/8194090
默认显示的字体大小为24,我们将其字体改为28后返回到主页面,然后重新进入该页面。你会发现字体的大小变为28了。重新启动程序进入该页面,你会发现字体的大小仍然为28。下拉列表的选中项与字体大小是时刻对应的.

实现方法如下:1.每次进入该页面的时候,首先获取之前保存的字体大小a.没有获取到将字体大小设为默认值b.获取到将字体大小设为获取的值2.用户改变字体大小时,保存改变后的值
private static ObservableCollection<Type> GetTypes() { //添加要序列化的类型 if (_Types == null) { _Types = new ObservableCollection<Type>(); _Types.Add(typeof(People)); _Types.Add(typeof(Student)); _Types.Add(typeof(Coder)); } return _Types; }其中_Types是全局对象ObservableCollection<Type>。至此,数据就保存好了。读取数据读取数据也就是进行反序列化,我们可以得到之前保存的对象集合,其数据类型是List<People>,然后我们将该对象集合交给ListView显示即可。
public static async Task<object> XMLDeserialize(Type type) { StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder; string fileName = "LocalDataPage-list_data.xml"; StorageFile newFile = await folder.GetFileAsync(fileName); Stream newFileStream = await newFile.OpenStreamForReadAsync(); //进行反序列化 DataContractSerializer ser = new DataContractSerializer(type, GetTypes()); object instance = ser.ReadObject(newFileStream); newFileStream.Dispose(); return instance; }可以看到读取的数据与之前保存的相同.我们的目的达到了。程序运行的效果如下:1.随机显示学生和程序员信息:
2.保存数据保存文件的内容<ArrayOfPeople xmlns="http://schemas.datacontract.org/2004/07/Win8_Study.Pages" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><People i:type="Student"><Age>14</Age><Name>学生1</Name><Score>66</Score></People><People i:type="Coder"><Age>24</Age><Name>程序员2</Name><WorkYears>4</WorkYears></People><People i:type="Student"><Age>7</Age><Name>学生3</Name><Score>86</Score></People><People i:type="Coder"><Age>23</Age><Name>程序员4</Name><WorkYears>1</WorkYears></People><People i:type="Coder"><Age>25</Age><Name>程序员5</Name><WorkYears>2</WorkYears></People></ArrayOfPeople>3.清除数据并读取之前保存的数据显示效果同第一张图.