我的可观察集合中填充了文件路径,例如:
C:/Documents/1.png
我希望将它们全部转换为文件名并用作我的列表框的itemsSource但observablecollection没有convertAll方法
ObservableCollection<string> InputEpisodes = new ObservableCollection<String>();
filesFoundListBox.ItemsSource = InputEpisodes.ConvertAll(x => Path.GetFileName(x));
答案 0 :(得分:3)
创建一个绑定转换器,将文件路径转换为文件名:
public class FileNameConverter : IValueConverter
{
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
return Path.GetFileName((string)value);
}
public object ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
然后在ListBox中使用它,如下所示:
<Window.Resources>
<local:FileNameConverter x:Key="FileNameConverter"/>
</Window.Resources>
...
<ListBox x:Name="filesFoundListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource FileNameConverter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您现在可以直接将InputEpisodes
集合分配给ListBox的ItemsSource:
filesFoundListBox.ItemsSource = InputEpisodes;
答案 1 :(得分:0)
嗯,虽然使用绑定转换器的答案很好,但如果您可能需要来自文件的更多信息,最好创建一个包含FileInformation
等必需属性的类FileName
, Path
,FileSize
...
通过这种方式,您可以更轻松地为列表框创建不同的演示文稿,并且您还可以保留原始路径,如果您需要获取信息(可能是您拥有给定文件的多个副本)如果允许来自多个目录的文件,请输入名称。)