Windows 8 Metro应用程序中的刷新问题

Windows 8 Metro应用程序中的刷新问题,windows-8,windows-runtime,Windows 8,Windows Runtime,这是一个奇怪的问题。我有一个Windows Phone应用程序,我正在将其移植到Win 8。它基本上是一个日历应用程序,结构如下 首先是MainPage.xaml,其中包含所有可用选项的预览。当您单击日历选项时。它会导航到另一个名为“日历”的页面。应用程序的全部数据由一个名为CycleManager的类管理,该类是一个密封类。存储在ApplicationDataContainer中的数据,它相当于IsolatedStorage 第一次创建实例时,它从ApplicationDataContaine

这是一个奇怪的问题。我有一个Windows Phone应用程序,我正在将其移植到Win 8。它基本上是一个日历应用程序,结构如下

首先是MainPage.xaml,其中包含所有可用选项的预览。当您单击日历选项时。它会导航到另一个名为“日历”的页面。应用程序的全部数据由一个名为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的函数,其中呈现了数据和图像

但如果我从模拟器运行它,所发生的事情是保存的数据不会显示,而是当您导航回主页并再次返回到日历页时。它呈现


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

您是否从
ApplicationDataContainer
异步加载数据(使用异步/wait关键字)?每一个需要超过20ms的操作(这不是简单的代码操作)都应该在WinRT中异步完成

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

使用断点进行调试时,数据加载速度足够快,因此可以正确显示。如果在模拟器中来回导航,数据也有时间加载到内存中

您也可以考虑在应用程序启动时加载数据,并在加载时使用它。 编辑: 在Windows 8中使用async入门的良好链接:。在您的场景中,这将是

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"]; 
}

将其与INotifyPropertyChanged的正确实现相结合(例如,通过从BindableBase派生的类,并使用setter中的
SetProperty
方法)。

不,我没有使用async/await关键字。public void ReadFromIsolatedStorage(){ApplicationDataContainer localSettings=ApplicationData.Current.localSettings;ApplicationDataCompositeValue composite=(ApplicationDataCompositeValue)localSettings.Values[“Setting”];}如何使函数aync?我现在不在Windows 8中,但是我添加了一些应该有效的示例代码。我的直觉告诉我这里最大的问题是时间问题。巴特在绑定发生之前所说的关于数据可用性的一切都是一针见血的。如果数据是在绑定发生后加载的,并且您的模型没有提供更改通知,那么绑定将不会知道,数据也不会显示。使用BindableBase、ObservableObject(来自MVVM Lite)或手动实现INotifyPropertyChanged将有所帮助。不要忘记,集合也必须是可观察的。对此使用ObservableCollection。@JaredBienz MSFT yeas Jared认为这就是问题所在。数据在绑定发生后加载。而且很多数据必须从隔离的存储器中读取。我用一种变通的方法把它修好了。在MainPage.xaml中实例化了CycleManager的对象。MainPage.xaml是一个虚拟页面,当前不显示任何数据。所以我猜,当我们导航到日历页面时,所有数据都会从ApplicationDataContainer和StorageFiles中读取。