Это не обязательно циклично, это только циклически, если Connector.Children
содержит ссылку на узел выше по текущему пути узла (и даже это должно быть как-то обработано с помощью виртуализации).
Обычно вам просто нужно создать два HierarchicalDataTemplates
в ресурсах TreeView
без каких-либо x:Key
, но DataType
с соответствующим типом.
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Node}"
ItemsSource="{Binding Connector}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Connector}"
ItemsSource="{Binding TrueChildren}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<TreeView.Resources>
(Использование x:Type
в DataType
очень важно, если вы хотите узнать, зачем читать ссылку на свойство )