将observablecollection路径转换为文件名集合

时间:2017-01-21 13:28:14

标签: c# wpf linq

我的可观察集合中填充了文件路径,例如:

C:/Documents/1.png

我希望将它们全部转换为文件名并用作我的列表框的itemsSource但observablecollection没有convertAll方法

ObservableCollection<string> InputEpisodes = new ObservableCollection<String>();

filesFoundListBox.ItemsSource = InputEpisodes.ConvertAll(x => Path.GetFileName(x));

2 个答案:

答案 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等必需属性的类FileNamePathFileSize ...

通过这种方式,您可以更轻松地为列表框创建不同的演示文稿,并且您还可以保留原始路径,如果您需要获取信息(可能是您拥有给定文件的多个副本)如果允许来自多个目录的文件,请输入名称。)