i have a treeView which i loaded data with ItemsSource like this:
[ObservableProperty]
private ObservableCollection<FileSystemItem> items = new ObservableCollection<FileSystemItem>();
private async Task LoadFolder(string folderPath, ObservableCollection<FileSystemItem> parentCollection)
{
foreach (string directoryPath in Directory.EnumerateDirectories(folderPath))
{
var directoryInfo = new DirectoryInfo(directoryPath);
var directoryNode = new FileSystemItem(directoryInfo);
await LoadFolder(directoryPath, directoryNode.Children);
parentCollection.Add(directoryNode);
}
foreach (string filePath in Directory.EnumerateFiles(folderPath))
{
var fileInfo = new FileInfo(filePath);
var fileNode = new FileSystemItem(fileInfo);
parentCollection.Add(fileNode);
}
}
now, i want to search in my treeview, i am using following code:
Items = new(Search(query, _backupItems));
public IEnumerable<FileSystemItem> Search(string query, ObservableCollection<FileSystemItem> nodes)
{
foreach (var node in nodes)
{
if (node.DisplayName.Contains(query, StringComparison.OrdinalIgnoreCase))
{
yield return node;
}
foreach (var result in Search(query, node.Children))
{
yield return result;
}
}
}
but there is 2 issues:
1.after searching and removing text from textbox ItemTemplaceSelector uses a wrong template!
2.i want to show every searched item in its parent folder, currently all searched items added into treeview root level.