我有一个按钮,用于打开文件浏览器并选择多个文件,然后将其添加到ListView
。
如何强制“浏览器”对话框始终按名称对文件进行排序,然后再添加到ListView
?
有时,Windows默认为Date Modified或除Name之外的其他排序方法。
注意:我在List
中有完整的文件路径,只有ListView
中的文件名。
private void btnInput_Click(object sender, RoutedEventArgs e)
{
// Open Select File Window
Microsoft.Win32.OpenFileDialog selectFiles = new Microsoft.Win32.OpenFileDialog();
selectFiles.Multiselect = true;
// Process Dialog Box
Nullable<bool> result = selectFiles.ShowDialog();
if (result == true)
{
// Add Path+Filename to List
foreach (String file in selectFiles.FileNames)
{
lstFilesPaths.Add(file);
}
// Add List Filename to ListView
lsvFiles.Items.Clear();
foreach (String name in fileList)
{
lsvFileNames.Items.Add(Path.GetFileName(name));
}
}
}
答案 0 :(得分:1)
文件浏览器本身不会按文件名对结果进行排序,您需要在使用它们之前这样做。
鉴于lstFilesPaths
是一个字符串列表,您要将所选文件路径保存到其他位置,请尝试按文件名称添加以下内容对列表进行排序:
foreach (var name in lstFilesPaths.Select(f => Path.GetFileName(f)).OrderBy(s => s))
{
lsvFileNames.Items.Add(name);
}
或者,如果您同时对文件路径列表和文件名列表视图进行排序,请尝试以下操作:
// Add Path+Filename to List
lstFilesPaths.AddRange(selectFiles.FileNames.OrderBy(f => Path.GetFileName(f)));
// Add List Filename to ListView
lsvFiles.Items.Clear();
foreach (var name in lstFilesPaths.Select(f => Path.GetFileName(f)))
{
lsvFileNames.Items.Add(name);
}
答案 1 :(得分:0)
尝试改为:
lstFilePaths.AddRange(selectFiles.FileNames.OrderBy(x => x))
lsvFileNames.Items.Clear();
lstFilePaths.ForEach(x => lsvFileNames.Items.Add(Path.GetFileName(x)));