Я пытаюсь отобразить имена файлов в списке, извлеченные из определенного каталога. Они хранятся в ObservableCollection объектов FileInfo:Конвертер прекращает работу фильтра
public ObservableCollection<FileInfo> ProjectFiles
{
get
{
if (SelectedFolder == null) return null;
DirectoryInfo d= new DirectoryInfo(SelectedFolder);
if (!d.Exists) return null;
return new ObservableCollection<FileInfo>(d.EnumerateFiles("*.xsi"));
}
}
я реализовал фильтр на ListBox, вызывается, когда текст вводится или изменен в текстовом поле «FilesFilterBy»:
private void FilterFiles_TextChanged(object sender, TextChangedEventArgs e)
{
ICollectionView view = CollectionViewSource.GetDefaultView(ProjectFiles);
view.Filter = new Predicate<object>(IsTextInFilename);
}
public bool IsTextInFilename(object item)
{
string Filename = Path.GetFileNameWithoutExtension((item as FileInfo).Name);
return (Filename.ToLower().Contains(FilesFilterBy.Text.ToLower()));
}
В то же время время, я хочу отображать только имена файлов, без пути или расширения. С этой целью я реализовал нейтрализатор:
public class RemoveExtensionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Path.GetFileNameWithoutExtension(value as string);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return new NotImplementedException();
}
}
Здесь не как ListBox реализуется в XAML:
<Window.Resources>
<ctr:RemoveExtensionConverter x:Key="JustFileName" />
</Window.Resources>
<ListBox ItemsSource="{Binding ProjectFiles}" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FullName, Converter={StaticResource JustFileName}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
В настоящее время преобразователь работает - только имена файлов в списке, но фильтр больше не имеет какой-либо эффект. Когда я ввожу текст в текстовое поле FileFilterBy, событие TextChanged запускается, но список остается неизменным. Кроме того, конвертер не вызывается в этой точке.
Что я делаю неправильно?
Благодарим вас. –