1
我想在一個列表框中顯示文件名,從一個特定的目錄中檢索。它們存儲在FileInfo的對象的一個ObservableCollection:轉換器停止過濾器工作
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」之稱:
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();
}
}
這裏是如何列表框在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事件被觸發,但列表框保持不變。此外,轉換器不會在此時被調用。
我在做什麼錯?
謝謝。 – 2010-08-03 13:06:15