0
votes

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>

1
Can you provide the code leads to error?oxilumin
Please, post the code... without it it is impossible to give any answer at all.Miguel Angelo
@user: or not. Narrow it down a bit. Nobody's going to read all that code.John Saunders
sorry about it, was afraid you guys needed to see the codes.lala
Most of that code isn't relevant to the question. Maybe tell us where the exception is being thrown, and get rid of all the code that isn't related.user47589

1 Answers

0
votes

Without knowing much about your application, or reading all code snippets you posted, I'm pretty sure you would want to add a null-check to the button2_Click method:

ViewDiskModel model =  this.LayoutRoot.DataContext as ViewDiskModel;

Basically what this does, is assign the ViewDiskModel to model if this.LayoutRoot.DataContext is of the type ViewDiskModel. If it is of any other type, it will assign null to `model.

Try checking if model == null after that line.