J'essaie d'afficher les noms de fichiers dans une liste, récupérés dans un répertoire particulier. Ils sont stockés dans un ObservableCollection d'objets FileInfo:Le convertisseur arrête le fonctionnement du filtre
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"));
}
}
J'ai mis en place un filtre sur la zone de liste, appelée lorsque le texte est entré ou modifié dans une zone de texte « 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()));
}
Dans le même Je souhaite afficher uniquement les noms des fichiers, sans chemin ni extension. A cette fin, je l'ai mis en place un convertisseur:
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();
}
}
Voici comment le listbox est mis en œuvre en 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>
fonctionne actuellement le convertisseur - seuls les noms de fichiers sont répertoriés, mais le filtre ne a un effet. Lorsque je saisis du texte dans la zone de texte FileFilterBy, l'événement TextChanged est déclenché mais la zone de liste reste la même. De plus, le convertisseur n'est pas appelé à ce moment-là.
Qu'est-ce que je fais mal? ProjectFiles renvoie une nouvelle collection à chaque fois.
Merci beaucoup. –