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あります。また、null でないかどうかを確認する必要があります。

あなたの間違いは次のとおりです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 に答える