У меня есть TreeView
, в котором я отображаю иерархические данные.
Модель
class Node : INotifyPropertyChanged
{
public string Name { get; set; }
public ObservableCollection<Node> Nodes { get; set; } = new ObservableCollection<Node>();
}
Хранение узлов:
class NodesStorage : ObservableCollection<Node>
{
public NodesStorage()
{
var node = new Node { Name = "1" };
node.Nodes.Add(new Node { Name = "1a" });
node.Nodes.Add(new Node { Name = "1b" });
node.Nodes.Add(new Node { Name = "1c" });
var node1 = new Node { Name = "2" };
node1.Nodes.Add(new Node { Name = "2a" });
node1.Nodes.Add(new Node { Name = "2b" });
node1.Nodes.Add(new Node { Name = "2c" });
this.Add(node);
this.Add(node1);
}
}
ViewModel
class MainWindowViewModel
{
public MainWindowViewModel()
{
Nodes = new NodesStorage();
}
public ObservableCollection<Node> Nodes;
}
Просмотр
<!--... Set DataContext ...-->
<TreeView ItemsSource="{Binding Path=Nodes}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Nodes}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<!--...-->
Вопрос
А теперь я хочу создать метод, который возвращает true
, если дерево содержит узел с следующим именем и false
в другом случае:
public static bool IsTreeContains(Node node, string itemName)
{
if (node.Name == itemName)
return true;
foreach (var n in node.Nodes)
{
return IsTreeContains(n, itemName);
}
// And what should I write here?
}
Я думаю Я могу использовать возврат здесь. Но это действительно плохая идея.
Как вы думаете?