2016-08-19 53 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