특정 디렉토리에서 검색된 파일 이름을 목록 상자에 표시하려고합니다. 그들은에서는 FileInfo 개체의 ObservableCollection에에 저장됩니다 같은에서변환기가 필터 작업을 중지합니다.
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 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"));
}
}
나는 텍스트가 텍스트 상자 "FilesFilterBy"에 입력되거나 변경 될 때 호출 목록 상자에 필터를 구현 시간, 경로 또는 확장명없이 파일 이름 만 표시하려고합니다. 파일 이름 만 나열되어 있지만, 더 이상 필터 -
가<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>
현재 컨버터가 작동합니다
여기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();
}
}
이 목록 상자는 XAML에서 구현되지 않은 방법 :이를 위해 내가 변환기를 구현 어떤 효과가있다. FileFilterBy 텍스트 상자에 텍스트를 입력하면 TextChanged 이벤트가 발생하지만 목록 상자는 그대로 유지됩니다. 또한 변환기는이 시점에서 호출되지 않습니다.
내가 뭘 잘못하고 있니?
감사합니다. –