简体   繁体   English

空引用异常c#wp7

[英]Nullreference exception c# wp7

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: nullreference异常在这里被抛出:

LoadFile.cs 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 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 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 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) 编辑:(这是我在加载页面的XAML中添加的内容)

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> 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>

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: 在不了解您的应用程序或阅读您发布的所有代码段的情况下,我很确定您希望向button2_Click方法添加一个空检查:

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 . 基本上,这是什么呢,是分配ViewDiskModelmodel如果this.LayoutRoot.DataContext是该类型ViewDiskModel If it is of any other type, it will assign null to `model. 如果它是任何其他类型,它将为模型赋予null

Try checking if model == null after that line. 尝试在该行之后检查model == null

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM