2016-08-19 54 views
-1

这里是我的问题:WPF:在列表框无法获取选定文件的列表

我有一个列表框,而我添加项目我点击一个按钮后:

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(FilesListListBox)将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; 
    } 
} 

回答

2

而不是只是在列表中添加文件名添加CsvFile。要做到这一点改变你填写FilesListListBox的方式:

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所以它显示的名称,而不是做的ToString()的CsvFile的。

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

或者,如果你想要在一行中做,并假设Settings.SelectedFilesList支持使用Linq的AddRange:

Settings.SelectedFilesList.AddRange(FilesListListBox.SelectedItems.Cast<CsvFile>()); 
+0

您是否可以在您投票反馈时添加评论。 –

+0

我当然没有downvote。感谢您的帮助,我仍然在学习WPF和XAML – Loreno

+0

您的解决方案肯定是准确的,但我不知道如何将这些选定的项目放在我的SelectedFilesList中。我做了你所有建议,然后我使用 foreach(var files在FilesListListBox.SelectedItems) { Settings.SelectedFilesList.Add(file); } – Loreno