I'm getting the same error when I'm trying to delete my save files. The problem is, I've successfully created the save files, but the error indicates that there isn't any save files at all when i tried deleting them. However, they do keep track of how many save files i've save. If possible, is anyone free to check my codes? I'm willing to send my app.
The nullreference exception is being thrown over here:
LoadFile.cs
private void button2_Click(object sender, RoutedEventArgs e)
{
ViewDiskModel model = this.LayoutRoot.DataContext as ViewDiskModel;
int m_iSelectedLoad = lstBox1.SelectedIndex;
if (m_iSelectedLoad >= 0)
{
model.DeleteSelectedFiles.Execute(null);
}
MessageBox.Show("Files Successfully Deleted");
}
Below are the codes responsible for the above codes to work.
AddFileModel.cs
namespace WindowsPhoneApplication1.Model
{
public class AddFileModel : ModelBase
{
private string _filename;
public string FileName
{
get
{
return this._filename;
}
set
{
this._filename = value;
this.OnPropertyChanged("FileName");
}
}
private string _filetext10;
public string FileText10
{
get
{
return this._filetext10;
}
set
{
this._filetext10 = value;
this.OnPropertyChanged("FileText10");
}
}
private ICommand _saveFile;
public ICommand SaveFile
{
get
{
this._saveFile = this._saveFile ?? new DelegateCommand(this.OnSaveFile);
return this._saveFile;
}
}
private ICommand _readSelectedFiles;
public ICommand ReadSelectedFiles
{
get
{
this._readSelectedFiles = this._readSelectedFiles ?? new DelegateCommand(this.OnReadSelected);
return this._readSelectedFiles;
}
}
private void OnSaveFile()
{
if (!string.IsNullOrEmpty(this.FileName))
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (store.FileExists(FileName))
store.DeleteFile(FileName);
using(StreamWriter writer = new StreamWriter(new IsolatedStorageFileStream(FileName, FileMode.OpenOrCreate, store)))
{
writer.WriteLine(this.FileText1 + this.FileText2 + this.FileText3 + this.FileText4 + this.FileText5 + this.FileText6 + this.FileText7 + this.FileText8 + this.FileText9 + this.FileText10);
writer.Close();
}
}
}
}
private void OnReadSelected()
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (store.FileExists(FileName))
{
using (StreamReader reader = new StreamReader(new IsolatedStorageFileStream(FileName, FileMode.OpenOrCreate, store)))
{
string textData = this.FileText1 + this.FileText2 + this.FileText3 + this.FileText4 + this.FileText5 + this.FileText6 + this.FileText7 + this.FileText8 + this.FileText9 + this.FileText10;
textData = reader.ReadLine();
}
}
else
{
MessageBox.Show("File not found!");
}
}
}
}
}
ViewDiskModel.cs
namespace WindowsPhoneApplication1.Model
{
public class FileItem : ModelBase
{
public bool isChecked;
public bool IsChecked
{
get { return this.isChecked; }
set
{
this.isChecked = value;
this.OnPropertyChanged("IsChecked");
}
}
public string FileName { get; set; }
public string FileText { get; set; }
}
public class ViewDiskModel : ModelBase
{
private IsolatedStorageFile currentStore;
public IsolatedStorageFile Store
{
get
{
this.currentStore = this.currentStore ?? IsolatedStorageFile.GetUserStoreForApplication();
return this.currentStore;
}
}
private ObservableCollection<FileItem> _files;
public ObservableCollection<FileItem> Files
{
get
{
this._files = this._files ?? this.LoadFiles();
return this._files;
}
}
private ObservableCollection<FileItem> LoadFiles()
{
ObservableCollection<FileItem> files = new ObservableCollection<FileItem>();
foreach (string filePath in this.Store.GetFileNames())
files.Add(new FileItem { FileName = filePath });
return files;
}
private ICommand _deleteSelectedFiles;
public ICommand DeleteSelectedFiles
{
get
{
this._deleteSelectedFiles = this._deleteSelectedFiles ?? new DelegateCommand(this.OnDeleteSelected);
return this._deleteSelectedFiles;
}
}
private ICommand _readSelectedFiles;
public ICommand ReadSelectedFiles
{
get
{
this._readSelectedFiles = this._readSelectedFiles ?? new DelegateCommand(this.OnReadSelected);
return this._readSelectedFiles;
}
}
private void OnDeleteSelected()
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
List<FileItem> removedItems = new List<FileItem>();
foreach (var item in this.Files)
{
if (item.IsChecked)
if (storage.FileExists(item.FileName))
{
storage.DeleteFile(item.FileName);
removedItems.Add(item);
}
}
foreach (var item in removedItems)
this.Files.Remove(item);
}
}
}
ModelBase.cs
namespace WindowsPhoneApplication1.Model
{
public class ModelBase : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventArgs eargs = new PropertyChangedEventArgs(propertyName);
if (this.PropertyChanged != null)
this.PropertyChanged(this, eargs);
}
#endregion
}
}
DelegateCommand.cs
namespace WindowsPhoneApplication1.Model
{
public class DelegateCommand : ICommand
{
private Action command;
public Action Command
{
get { return this.command; }
}
private Func<bool> canExecuteCommand;
public DelegateCommand(Action cmd, Func<bool> canexecute)
{
this.canExecuteCommand = canexecute;
this.command = cmd;
}
public DelegateCommand(Action cmd)
{
this.command = cmd;
}
#region ICommand Members
public bool CanExecute(object parameter)
{
if (this.canExecuteCommand != null)
return this.canExecuteCommand();
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
if (this.command != null)
this.command();
}
#endregion
}
}
Edited: (This is what i add in my XAML of the load page)
ListBox ItemsSource="{Binding Files}" Margin="0,42,0,115" SelectionChanged="ListBox_SelectionChanged" Name="lstBox1" DataContext="{StaticResource vmDiskModel}"> ListBox.ItemTemplate> DataTemplate > CheckBox IsChecked="{Binding IsChecked}" Content="{Binding FileName}" /> /DataTemplate> /ListBox.ItemTemplate> /ListBox>