Я пытаюсь собрать древовидную структуру с папками смешанных классов. Корневые папки один класс и вложенные папки другого, например:Treeview с разными классами папок
Root Folder #1 <-- DirectoryItem class
--Sub Folder <-- SubDirectoryItem class
----file <-- FileItem class
Root Folder #2 <-- DirectoryItem class
--Sub Folder <-- SubDirectoryItem class
----file <-- FileItem class
Я пытается объединить два различных рекурсивных методов, так что вложенные папки извлекаются как «SubDirectoryItems» вместо «DirectoryItem» Я избавлю эта попытка кода из-за отсутствия уточнения, но мне интересно, есть ли лучший подход?
class ItemProvider
{
public List<Item> GetItems(string path, SearchOption searchOption)
{
var items = new List<Item>();
var dirInfo = new DirectoryInfo(path);
foreach (var directory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly))
{
var item = new DirectoryItem
{
Name = directory.Name,
Path = directory.FullName,
Items = GetItems(directory.FullName, SearchOption.AllDirectories)
};
items.Add(item);
}
foreach (var subdirectory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly))
{
var item = new SubDirectoryItem()
{
Name = subdirectory.Name,
Path = subdirectory.FullName,
Items = GetItems(subdirectory.FullName, SearchOption.AllDirectories)
};
items.Add(item);
}
foreach (var file in dirInfo.GetFiles())
{
var item = new FileItem
{
Name = file.Name,
Path = file.FullName
};
items.Add(item);
}
return items;
}
}
}
Я здесь смущен. Что именно вы ищете? Предполагаете ли вы, что в любой момент времени будет только одна подпапка (уровень, такой как дополнительные папки внутри подпапки)? По существу; Подпапка также является элементом каталога. – A3006
Нет, я хочу сделать все папки верхнего уровня в (пути) одним типом класса каталога. Все, что под ним должно быть либо файлами, либо типом типа подпапки, независимо от того, насколько глубоки уровни деревьев. В моем древовидном виде у каталогов верхнего уровня будут кнопки и всевозможные вещи, и я думаю, что это будет более чистый способ добиться, чем разделить его на xaml с триггерами данных и ivalueconverters и т. Д. – ctalley5