C# ViewDiskModel.DeleteSelectedFiles.Execute(null)不会删除任何文件

C# ViewDiskModel.DeleteSelectedFiles.Execute(null)不会删除任何文件,c#,windows-phone-7,nullreferenceexception,isolatedstorage,delete-file,C#,Windows Phone 7,Nullreferenceexception,Isolatedstorage,Delete File,我的应用程序不会删除隔离存储中加载页面上的保存文件。delete和ViewDiskModel.cs类的代码如下: 加载页面.cs private void button2_Click(object sender, RoutedEventArgs e) { ViewDiskModel model = lstBox1.DataContext as ViewDiskModel; int m_iSelectedLoad = lstBox1.SelectedInd

我的应用程序不会删除隔离存储中加载页面上的保存文件。delete和ViewDiskModel.cs类的代码如下:

加载页面.cs

private void button2_Click(object sender, RoutedEventArgs e)
    {
        ViewDiskModel model = lstBox1.DataContext as ViewDiskModel;

        int m_iSelectedLoad = lstBox1.SelectedIndex;
        if (m_iSelectedLoad >= 0)
        {
            model.DeleteSelectedFiles.Execute(null);


        }

        MessageBox.Show("Files Successfully Deleted");
    } 
ViewDiskModel.cs:

 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);
        }

        private void OnReadSelected()
        {
            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
{
检查公共场所;
公共场所被检查
{
获取{返回this.isChecked;}
设置
{
this.isChecked=值;
本条关于财产的变更(“已检查”);
}
}
公共字符串文件名{get;set;}
公共字符串FileText{get;set;}
}
公共类ViewDiskModel:ModelBase
{
私有隔离存储文件currentStore;
公共隔离存储文件存储
{
得到
{
this.currentStore=this.currentStore??IsolatedStorageFile.GetUserStoreForApplication();
返回此.currentStore;
}
}
私有可观察收集文件;
公共可观测收集文件
{
得到
{
this._files=this._files??this.LoadFiles();
返回此文件。\u文件;
}
}
私有ObservableCollection加载文件()
{
ObservableCollection文件=新的ObservableCollection();
foreach(this.Store.GetFileNames()中的字符串文件路径)
添加(新文件项{FileName=filePath});
归还文件;
}
私有ICommand _删除选定文件;
公共ICommand和DeleteSelectedFiles
{
得到
{
this.\u deleteSelectedFiles=this.\u deleteSelectedFiles??新建DelegateCommand(this.OnDeleteSelected);
返回此文件。\u删除所选文件;
}
}
私有ICommand_readselected文件;
公共ICommand ReadSelectedFiles
{
得到
{
this.\u readSelectedFiles=this.\u readSelectedFiles??新建DelegateCommand(this.OnReadSelected);
返回此文件。\u readSelectedFiles;
}
}
已选择的专用void()
{
IsolatedStorageFile存储=IsolatedStorageFile.GetUserStoreForApplication();
List removedItems=新列表();
foreach(此.Files中的var项)
{
如果(项目已检查)
if(storage.FileExists(item.FileName))
{
storage.DeleteFile(item.FileName);
移除项目。添加(项目);
}
}
foreach(removedItems中的var项)
此.Files.Remove(项);
}
私有void OnReadSelected()
{
IsolatedStorageFile存储=IsolatedStorageFile.GetUserStoreForApplication();
List removedItems=新列表();
foreach(此.Files中的var项)
{
如果(项目已检查)
if(storage.FileExists(item.FileName))
{
storage.DeleteFile(item.FileName);
移除项目。添加(项目);
}
}
foreach(removedItems中的var项)
此.Files.Remove(项);
}
}
LoadingPage.XAML:

<!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" DataContext="{StaticResource vmDiskModel}">
            <Button Content="Back" Height="72" HorizontalAlignment="Left" Margin="0,530,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" />
            <Button Content="Delete" Height="72" HorizontalAlignment="Left" Margin="150,530,0,0" Name="button2" VerticalAlignment="Top" Width="160" Click="button2_Click" />
            <Button Content="Continue" Height="72" HorizontalAlignment="Left" Margin="296,530,0,0" Name="button3" VerticalAlignment="Top" Width="160" Click="button3_Click" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="6,6,0,0" Name="textBlock1" Text="PLease select a save file to load." VerticalAlignment="Top" />
            <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>
        </Grid>
    </Grid>

当我运行代码时,我在MainPage.xaml.cs的第33行得到一个
NullReferenceException
这是因为您引用了This.LayoutRoot的DataContext,但从未设置过此项。实际上,您已经设置了
ContentPanel
的数据上下文
因此,第32行应为:

ViewDiskModel model = this.ContentPanel.DataContext as ViewDiskModel;
另外:
视图模型不知道在使用默认的
OneWay
属性绑定时检查了哪些项。您需要将其更改为双向,以便将UI中的更改反映回视图模型

<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding FileName}" />

通过这两项更改,选定的文件将被删除

其他问题:

  • 在一个接一个地创建多个文件,一次只创建一个文件时,似乎存在一些问题,但我没有对此进行研究

  • 在使用实现了
    IDisposable
    IsolatedStorageFile
    时,您没有调用
    Dispose()
    (或使用
    指令)

  • 代码说它已经删除了这些文件,即使没有要删除的文件

  • 该应用程序试图显示IsolatedStorage配额,但手机上不存在此概念。没有配额,这就是为什么它显示64位整数的最大值,而不考虑手机中磁盘的大小

  • 还有可能更多


运行代码时会发生什么?有错误吗?如果是,什么?在哪一行?@Matt Lacey-没有错误,它只是没有做它应该做的,删除保存文件。知道问题出在哪里吗?@lala当你一步一步地看代码时,它会调用
onDeleteSelected()
?不知道如何检查,但看看代码,我相信它是通过DeleteSelectedFiles图标命令调用该方法的。这看起来像是它在做什么,但如果没有完整的示例,很难说是怎么回事。在事件处理程序中设置断点,并逐步完成代码(F9)。如果按原样运行代码,会发生什么?您是否显示了messagebox?谢谢您的帮助,但是如何调用dispose()?如果没有要删除的文件,我可以解决代码说它已经删除了文件的部分。还有一个问题是,我必须重新运行应用程序才能保存文件