在我的应用程序中,我正在App.xaml.cs中创建XML,如下所示:
public async static void CreateBadgesXML()
{
StorageFolder sf = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Data", CreationCollisionOption.OpenIfExists);
StorageFile st = await sf.CreateFileAsync("Badgess.xml", CreationCollisionOption.ReplaceExisting);
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);
}
接下来在MainViewModel我使用reposiory模式将这些数据绑定到ObservableCollection,如下所示:
IList<Badge> list = await _badgeService.GetAll();
BadgesList = list.ToObservableCollection<Badge>();
但是,当我要在另一个视图中编辑此XML时,该视图连接到另一个VievModel(QuestionViewModel),如下所示:
public async Task Update(int id)
{
StorageFolder sf = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Data", CreationCollisionOption.ReplaceExisting);
StorageFile st = await sf.CreateFileAsync("Badgess.xml", CreationCollisionOption.ReplaceExisting);
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 = "true";
x1.AppendChild(x14);
x.AppendChild(x1);
await dom.SaveToFileAsync(st);
}
从QuestionViewModel向MainViewModel发送消息,如下所示:
Messenger.Default.Send<CleanUp>(new CleanUp());
并尝试再次绑定此集合:
private void CallCleanUp(CleanUp obj)
{
BadgesList = null;
GetBadges();
}
我收到错误XmlException“缺少根元素。”我不明白为什么在XML更新后,这个文件的内容是空的?有什么想法吗?
修改
在更新方法发生更改后,现在我的BadgeService中的GetAll()
方法中出现了UnauthorizedAccessException,仍然很奇怪,因为只有在更新XML之后才出现。
答案 0 :(得分:0)
也许你应该试试这个:
dom.AppendChild(x);
之后:
x.AppendChild(x1);
我认为你应该在创建x1和x后将x添加到xml文件中。