0

我正在使用以下属性绑定到列表框。列表框显示文件并可以执行 Save 方法打开 SaveDialogBox。

我遇到的问题是集合中的每个文件都出现对话框,而不是我从列表框中单击的选定项目文件。下面是代码,我错过了什么吗?

public ObservableCollection<Files> FilesProperty
        {
            get
            {
                return mFilesProperty;
            }
        }



public Files FilesSelectedItem
    {
        get
        {
            return mFilesSelectedItem;
        }
        set
        {
            mFilesSelectedItem = value;
            OnPropertyChanged("FilesSelectedItem");
        }
    }

这是执行保存的方法。

private void Save(object parameter)
        {

            SaveFileDialog dlg = new SaveFileDialog();
            {
                dlg.AddExtension = true;
                dlg.DefaultExt = "xlsx";
                dlg.Filter = "New Excel(*.xlsx)|*.*";
                foreach (var files in FilesProperty)
                {
                    if (dlg.ShowDialog() ?? false)
                    {

                        File.WriteAllBytes(dlg.FileName, files.Data);

                    }
                }
            }
        }

这是列表框的基本代码,还有更多用于 xaml 的代码,但它太长了。

    <ListBox Grid.Row="2"
             ItemsSource="{Binding FilesProperty}"
             SelectedItem="{Binding FilesSelectedItem, Mode=TwoWay}"
             BorderThickness="1"/>
4

1 回答 1

1

您要保存所选项目吗?

因此,您需要保存存储在FilesSelectedItem属性中的数据。此外,您应该检查它是否不为空。

您的错误如下:您尝试遍历FilesProperty集合。

   private void Save(object parameter)
    {
        SaveFileDialog dlg = new SaveFileDialog();
        {
            dlg.AddExtension = true;
            dlg.DefaultExt = "xlsx";
            dlg.Filter = "New Excel(*.xlsx)|*.*";
            var file = FilesSelectedItem;

            if (dlg.ShowDialog() ?? false)
            {
                File.WriteAllBytes(dlg.FileName, file);
            }
        }
    }
于 2013-06-09T18:15:10.373 回答