在 Silverlight for Windows Phone (XAML / C#) 中编写一个 WP7.1 (Mango) 应用程序。我有一个我不能动摇的例外。我有一个 ListBox 显示一个ObservableCollection<string>
显示 XML 文件的文件名的IsolatedStorage
. Listbox 控件还包含ContextMenu
来自 Windows Phone Toolkit 的一个。我用它从我的 ListBox 和磁盘中删除项目。
和我的ContextMenu
删除方法正常工作......但是,如果在同一页面上没有导航,我创建一个新文件(我们称之为 File1)然后创建另一个文件(File2),如果我然后尝试删除 File1,该IsolateStorageFile.DeleteFile
方法抛出一个异常,指出“访问独立存储时发生错误”,内部消息为 null。但是,如果我创建 File1,则创建 File2。然后删除 File2 然后 File1,它工作得很好!啊!
如果我离开页面或再次重新启动应用程序,我可以删除文件没有问题。
我已经剥离了代码,希望让它更容易阅读。
UI Binding Collection 字段在代码后面。
ObservableCollection<string> Subjects;
Click 事件调用 write 方法。
private void Button_Click_AddNewSubject(object sender, RoutedEventArgs e)
{
if (TryWriteNewSubject(NewSubjectNameTextBox.Text))
{
... Manipulate UI
}
}
将文件添加到 IsoStore 和主题集合的方法。返回用于条件 UI 操作的布尔值。
private bool TryWriteNewSubject(string subjectName)
{
... file name error checking
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
store.OpenFile(subjectName + ".xml", FileMode.CreateNew);
store.Dispose();
}
Subjects.Add(subjectName);
return true;
}
else return false;
}
else return false;
}
ContextMenu 点击事件调用删除文件方法
private void ContextMenuButton_Click(object sender, RoutedEventArgs e)
{
string subjectName = (sender as MenuItem).DataContext as string;
DeleteFile(subjectName);
}
还有我的删除方法
private void DeleteFile(string subjectName)
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
string fileName = subjectName + ".xml";
store.DeleteFile(fileName);
Subjects.Remove(subjectName);
}
}
代码很简单,我只是不知道我错过了什么。:(