1

在我的 app.xaml.cs 中,我正在使用以下代码创建 XML:

private async static void CreateXML()
    {
        StorageFolder sf = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Data", CreationCollisionOption.OpenIfExists);
        StorageFile st = await sf.CreateFileAsync("Badgess.xml", CreationCollisionOption.OpenIfExists);

        XmlDocument dom = new XmlDocument();
        XmlElement x;

        x = dom.CreateElement("badges");
        dom.AppendChild(x);

        XmlElement x1 = dom.CreateElement("badge");

        XmlElement x11 = dom.CreateElement("id");
        x11.InnerText = "1";
        x1.AppendChild(x11);

        XmlElement x12 = dom.CreateElement("name");
        x12.InnerText = "Badge One";
        x1.AppendChild(x12);

        XmlElement x13 = dom.CreateElement("pictureurl");
        x13.InnerText = "two.png";
        x1.AppendChild(x13);

        XmlElement x14 = dom.CreateElement("isachieved");
        x14.InnerText = "false";
        x1.AppendChild(x14);

        x.AppendChild(x1);

        await dom.SaveToFileAsync(st);
    }

当应用程序启动时,我看不到这些数据,我正在使用存储库模式并将对象绑定到 observableList,如下所示:

public async Task<IList<Badge>> GetAll()
    {
        StorageFolder sf = await ApplicationData.Current.LocalFolder.GetFolderAsync("Data");
        StorageFile st = await sf.GetFileAsync("Badgess.xml");

        XDocument doc = XDocument.Parse(await FileIO.ReadTextAsync(st));

        var data = from query in doc.Descendants("badge")
                   select new Badge
                  {
                      Id = (int)query.Element("id"),
                      Name = (string)query.Element("name"),
                      PictureURL = (string)query.Element("pictureurl"),
                      IsAchieved = (bool)query.Element("isachieved"),
                  };

        return (IList<Badge>)data.ToList();
    }

捆绑:

IList<Badge> list = await _badgeService.GetAll();

        BadgesList = list.ToObservableCollection<Badge>();

只有当我转到应用程序的另一个视图然后返回主视图时才会出现,应用程序启动后它不会出现,我不知道为什么?如果有人可以帮助我,那就太好了,因为我为此奋斗了 2 天并且不知道,该项目托管在GitHub 上,因此如果需要,可以查看。

4

1 回答 1

2

当你进入INotifyPropertyChanged时你没有加注。请记住,这将“暂停”您的方法并返回- 因此不会您的构造函数中设置。BadgesListGetBadgesasyncBadgesList

但是,我建议进行更多的重新设计。你应该强烈避免async voidasync我有一些关于构造函数async属性(支持数据绑定)的博客文章,它们比async void.

于 2013-09-11T16:42:25.043 回答