【问题标题】:Windows Store App Saving State InformationWindows 应用商店应用保存状态信息
【发布时间】:2012-12-08 15:23:57
【问题描述】:

我刚刚开始使用 Windows 8 开发(使用 c#),并且正在将我的一个应用程序移植到 Windows 商店应用程序。本质上,我的应用程序接受用户输入字符串,计算适当的输出并响应用户。所以我使用列表视图来跟踪“对话”。我将用户的输入显示为列表视图元素,然后将输出显示为下一个元素(使用带有颜色等格式的文本块......)。

我想做的是在应用程序终止后让这种“对话”持续存在,但我不确定执行此操作的最佳方式。我的第一个想法是在挂起时序列化列表视图对象,然后在加载时对其进行反序列化,但列表视图不可序列化......所以我的下一个想法是将每个输入和输出字符串写入文件并尝试重建列表视图当我加载应用程序时从这些字符串中提取,但我也遇到了一些问题。

所以我很好奇解决这个问题的最佳方法是什么。我希望应用程序开始备份之前已经以相同格式显示的对话,而不是什么。有人有什么想法吗?

【问题讨论】:

    标签: c# windows-8 windows-store-apps application-state


    【解决方案1】:

    无论如何我都不会持久化 ListView,你只需要持久化其中的数据。您是否使用 MVVM 类型模型,您的对话可能被捕获为ObservableCollection,然后绑定到 ListView?如果没有,你应该:)

    然后您只需要序列化 ​​ObservableCollection(请参阅one option for that here)。你在哪里坚持它取决于你:

    • LocalFolder 将使用基于文件的方法并在本地设备上可用
    • RoamingFolder 也将使用基于文件的方法,但使用云在用户拥有(并已安装应用程序)的多个设备上进行同步
    • 云存储(如 Windows AzureWindows Azure Mobile Services)将为您提供基本上无限的存储空间,但需要管理云帐户并付费(尽管免费层级可能就足够了)
    • SQLite 这样的内存数据库是另一种选择,如果您感兴趣,它会为您提供关系语义。

    首先,我会说使用LocalFolder 并将您的集合保存到一个文件中,然后当您重新水化它时,简单的数据绑定应该会自动处理显示。在某些时候,您可能需要决定存储多少。您希望您的应用程序能够响应用户(“快速且流畅”),因此您可能需要在请求时引入数据,而不是一次全部引入(也许是版本 2 的功能!)

    【讨论】:

    • 感谢您的建议。我对此很陌生(两天!),我不确定 ObservableCollection 是如何工作的,也不知道数据绑定在视图中是如何工作的。你对开始的地方有什么建议吗?这也允许我存储文本块的格式吗?还是我必须在补水时重新创建它?
    • 是的,看看 Visual Studio 中的内置项目是如何工作的。这个想法是,您的格式是设计 (XAML) 的一部分,并且通过将绑定引用连接到集合中的对象,这一切都神奇地起作用。 Microsoft 的Generation App 程序是介绍所有功能和模式的好方法。 Contoso Cookbook 也是一个很好的示例应用程序可供参考,并查看开发中心 (dev.windows.com) 上的示例。搜索 MVVM 和 Windows 8 了解更多信息。
    • 有趣。我在代码隐藏中处理我的格式,因为我需要交替格式,并且从几个小时的谷歌搜索中,找不到让我的列表视图成员在 xaml 中使用交替样式进行格式化的好方法。跨度>
    • ItemTemplateSelector 将是这里的关键,here's a sample 应该传达一般方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多