2
관찰 가능한 컬렉션을 사용하여 내 앱에 목록을 저장하고 XML을 사용하여 해당 목록을 격리 된 저장소에 저장합니다. 응용 프로그램은 항목을 추가 할 때 확인되지만 항목을 삭제하고 응용 프로그램을 다시 시작하면 XML을 읽을 수 없습니다. 나는 도구를 사용하여 격리 된 저장소에서 해당 XML을 가져오고 네, 구조가 잘못되었습니다. XML 파일이 여전히 삭제 된 항목의 일부를 유지처럼 여기 observablecollection에서 항목을 삭제하면 XML serialize 업데이트가 실패합니다.
코드public void saveToXML()
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
XmlWriterSettings xmlWriterSetting = new XmlWriterSettings();
xmlWriterSetting.Indent = true;
using (storage)
{
using (IsolatedStorageFileStream fsIdea = new IsolatedStorageFileStream("Idea.xml", FileMode.OpenOrCreate, storage))
{
using (XmlWriter xWIdea = XmlWriter.Create(fsIdea, xmlWriterSetting))
{
XmlSerializer xSIdea = new XmlSerializer(typeof(ObservableCollection<IdeaViewModel>));
xSIdea.Serialize(xWIdea, App.ViewModel.ItemsIdea);
}
}
}
}
public void readFromXML()
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
if (!storage.FileExists("Idea.xml"))
{
saveToXML();
}
using (storage)
{
using (IsolatedStorageFileStream fsIdea = new IsolatedStorageFileStream("Idea.xml", FileMode.Open, storage))
{
XmlSerializer xSIdea = new XmlSerializer(typeof(ObservableCollection<IdeaViewModel>));
App.ViewModel.ItemsIdea = xSIdea.Deserialize(fsIdea) as ObservableCollection<IdeaViewModel>;
}
}
}
이며, 여기에 내가 항목을 삭제하고 응용 프로그램을 다시 시작할 때 잘못된 XML 파일이며, 오류가, 9 호선에있다 본다 ?
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfIdeaViewModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<IdeaViewModel>
<IdeaContent>sdfsd</IdeaContent>
</IdeaViewModel>
<IdeaViewModel>
<IdeaContent>sdfds</IdeaContent>
</IdeaViewModel>
</ArrayOfIdeaViewModel>aContent>sf</IdeaContent>
</IdeaViewModel>
<IdeaViewModel>
<IdeaContent>sdfsd</IdeaContent>
</IdeaViewModel>
<IdeaViewModel>
<IdeaContent>sdfds</IdeaContent>
</IdeaViewModel>
</ArrayOfIdeaViewModel>
(나는 응용 프로그램의 생성자에서 readFromXML()을 넣고, 여기에
// Code to execute when the application is deactivated (sent to background)
// This code will not execute when the application is closing
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
saveToXML();
}
// Code to execute when the application is closing (eg, user hit Back)
// This code will not execute when the application is deactivated
private void Application_Closing(object sender, ClosingEventArgs e)
{
// Ensure that required application state is persisted here.
saveToXML();
}
감사합니다. :) 문제는 고쳐진 것 같지만 2 개의 작은 질문이 궁금합니다 : 1. 위의 솔루션을 사용해야합니다 (종료시에만 저장해야 함). 또는 앱에서 목록을 수정할 때마다 변경 사항을 저장해야합니까? 앱에 충분한 시간이 있습니다. 마침내 저장하십시오. 2. 나는 여기에 3 ~ 4 개의 질문을했으며, 당신이 나를 즉각적으로 도왔다 고 생각합니다. 감사합니다. 그러나 | 당신은 항상 온라인에 머물러 있니? :) – user3448806
@ user3448806 1은 사용자의 데이터, 사용자가 수정 한 횟수, 크기 등에 따라 다릅니다. 앱이 비활성화/종료되는 데 제한된 시간이 있습니다. 너무 많은 데이터와 수정이 아니라면 변경 직후에 저장합니다. 모든 것은 앱의 목적에 달려 있습니다. 2 ~는 운 좋게 항상 없습니다.) – Romasz