Metro应用程序中的刷新问题

时间:2012-08-13 14:13:46

标签: windows-8 windows-runtime

这是一个我坚持的奇怪问题。我有一个Windows Phone应用程序,我正在移植到Win 8.它基本上是一个按以下方式构建的日历应用程序。

首先是MainPage.xaml,它预览了所有可用选项。单击“日历”选项时。它导航到另一个名为Calendar的页面。应用程序的整个数据由一个名为CycleManager的类管理,这是一个密封类。数据存储在ApplicationDataContainer中,相当于IsolatedStorage

第一次创建实例时,它会从ApplicationDataContainer

中读取
public sealed class CycleManager
{
    private static readonly CycleManager instance = new CycleManager();

    public CycleManager()
    {
        localfolder = Windows.Storage.ApplicationData.Current.LocalFolder;
        ReadFromIsolatedStorage();

    }

    public static CycleManager Instance
    {
        get
        {
            return instance;
        }

    }
}

导航回主页时会保存数据。

所以现在,我的问题是这个,当我调试。它工作正常。保存的数据显示在日历上。 在Calendar类的构造函数中,我调用一个名为CreateCalendar的函数,并在其中呈现数据和图像。

但是,如果我从模拟器运行它,会发生什么是保存的数据不会显示,但是当您导航回主页并再次返回日历页面时。它渲染。

模拟器如何在调试时显示一种行为,另一种是通过jus运行已部署的应用程序?

1 个答案:

答案 0 :(得分:1)

您是否正在加载来自ApplicationDataContainer 异步的数据(使用 async / await 关键字)?每个操作超过20毫秒(这不是一些简单的代码操作)都应该在WinRT中异步完成。

加载数据可能需要一段时间,根据数据绑定的设置方式,您通常会在1-2秒后看到数据出现在您的屏幕上,如果您没有实现{{1事件(VS模板中的Common文件夹有一个INotifyPropertyChanged对象为您执行此操作)。如果这是正确实现的,数据会弹出,只需给它一些时间。

当您使用断点进行调试时,数据加载得足够快,以便正确显示。如果您在模拟器中前后导航,数据也有时间加载到内存中。

您也可以考虑在应用程序启动时加载数据,并在加载时使用extended splash screen

编辑: 在Windows 8中开始使用异步的一个很好的链接:http://www.silverlightshow.net/items/Windows-8-Metro-Asynchrony-made-easy.aspx。在你的场景中,这将是

BindableBase

将它与正确的INotifyPropertyChanged实现相结合(例如通过从BindableBase派生的类并在setter中使用public CycleManager() { localfolder = Windows.Storage.ApplicationData.Current.LocalFolder; Task.Run(() => ReadFromIsolatedStorage()); } public async Task ReadFromIsolatedStorage() { ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; ApplicationDataCompositeValue composite = (ApplicationDataCompositeValue)localSettings.Values["Setting"]; } 方法)。