WPF:无法在列表框中获取选定文件的列表
本文关键字:列表 获取 文件 WPF | 更新日期: 2023-09-27 18:03:00
我的问题是:
我有一个ListBox,我在点击按钮后添加项目:
var files = System.IO.Directory.GetFiles("c:'", "*.csv");
foreach (var file in files)
{
string fileName = System.IO.Path.GetFileNameWithoutExtension(file);
Settings.AllFilesList.Add(new CsvFile(fileName));
FilesListListBox.Items.Add(fileName);
}
运行正常
现在,我的ListBox (fileslistbox)的SelectionMode设置为"Multiple"。我现在需要的是能够将选中的文件保存在一个名为SelectedFilesList的列表中。如上所示,所有文件都存储在一个名为AllFilesList的列表中。
我该怎么做呢?
我试着:
private void Button_Click_2(object sender, RoutedEventArgs e)
{
foreach (var file in FilesListListBox.SelectedItems)
{
Settings.SelectedFilesList.Add(file);
}
}
,但它没有工作。我认为在上面的foreach循环中,每个文件对象都只是一个包含文件名的字符串,所以这就是它不起作用的原因。我的SelectedFilesList需要CsvFile类型的对象。
public class CsvFile
{
public string Name { get; set; }
public CsvFile(string name)
{
Name = name;
}
}
不只是在列表中添加文件名,而是添加CsvFile。要做到这一点,请将fileslistbox的填充方式更改为:
var files = System.IO.Directory.GetFiles("c:''", "*.csv");
foreach (var file in files)
{
string fileName = System.IO.Path.GetFileNameWithoutExtension(file);
var csvFile = new CsvFile(fileName);
Settings.AllFilesList.Add(csvFile);
FilesListListBox.Items.Add(csvFile );
}
然后将DisplayMemberPath添加到FilesListListBox中,这样它就会显示名称,而不是执行CsvFile的ToString()。
FilesListListBox.DisplayMemberPath = "Name";
或者在XAML:
中<ListBox Name="FilesListListBox" DisplayMemberPath="Name" />
编辑这是你如何添加项目到你的集合后:
private void Button_Click_2(object sender, RoutedEventArgs e)
{
foreach (CsvFile file in FilesListListBox.SelectedItems)
{
Settings.SelectedFilesList.Add(file);
}
}
或者如果你想在一行中做并且假设设置。SelectedFilesList支持AddRange使用Linq:
Settings.SelectedFilesList.AddRange(FilesListListBox.SelectedItems.Cast<CsvFile>());