我使用MVVM用DirectoryInfo及其所有子目录和文件填充TreeView.
然后我想和LINQ一起在树视图中搜索.where(),但我只搜索顶级目录,而不是文件.
I'm creating the treeview/DirectoryInfo with a recursive method:
public class ItemProvider
{
public ObservableCollection<Item> GetItems(string path)
{
var items = new ObservableCollection<Item>();
if (System.IO.Directory.Exists(path))
{
var dirInfo = new DirectoryInfo(path);
foreach (var directory in dirInfo.EnumerateDirectories())
{
var item = new DirectoryItem
{
Name = directory.Name,
Path = directory.FullName,
Items = GetItems(directory.FullName)
};
items.Add(item);
}
foreach (var file in dirInfo.EnumerateFiles())
{
InteropBitmap thumbImg = ShellFile.FromFilePath(file.FullName).Thumbnail.BitmapSource as InteropBitmap;
thumbImg.Freeze();
var item = new FamilyItem
{
Name = file.Name,
Path = file.FullName,
FamImage = thumbImg
};
if (item.Name.Contains(".rfa"))
{
items.Add(item);
}
}
return items;
}
else
{
return items;
}
}
DirectoryItem和FamilyItem都继承了一个名为Item的模型:
Item model:
public class Item
{
public string Name { get; set; }
public string Path { get; set; }
public InteropBitmap FamImage { get; set; }
}
DirectoryItem model:
public class DirectoryItem : Item
{
public ObservableCollection<Item> Items { get; set; }
public DirectoryItem()
{
Items = new ObservableCollection<Item>();
}
}
FamilyItem:
public class FamilyItem : Item
{
}
I'm filtering the collection with:
Items = new ObservableCollection<Item>(ItemsCache.Where(x => x.Name.ToLower().Contains(SearchText.ToLower())));
我只得到匹配的顶级目录-我想得到所有匹配的"end"文件-我该怎么做呢?