Я пытаюсь визуализировать TreeView со смесью самоссылающихся и внешних сущностей, но не могу найти какое-либо решение, которое работает ..
У меня есть следующие модели:
# Folder
-> string Name
-> Folder ParentFolder
-> Collection<Folder> Children
-> Collection<Document> Documents
# Document
-> string Name
-> Folder Folder
Я пытаюсь отобразить его в виде иерархии файловой системы следующим образом:
+ Folder 1
+ Folder 1.1
- Doc 1
- Doc 2
+ Folder 2
+ Folder 2.1
+ Folder 2.2
- Doc 3
- Doc 4
ViewModel, привязанный к представлению, содержит Collection<Folder> Folders
.
Я пробовал много разных комбинация в XAML с простым связыванием и MultiBinding, но безуспешно. Вот мой текущий XAML (который не работает, потому что не отображает иерархию):
<TreeView ItemsSource="{Binding Folders}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type model:Folder}">
<HierarchicalDataTemplate.ItemsSource>
<MultiBinding>
<Binding Path="Children" />
<Binding Path="Documents" />
</MultiBinding>
</HierarchicalDataTemplate.ItemsSource>
<TextBlock Text="{Binding Name}" Background="Blue"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type model:Document}">
<TextBlock Text="{Binding Name}" Background="Red"/>
</DataTemplate>
</TreeView.Resources>
</TreeView>
Я также попробовал следующее, которое отображает иерархию папок, но не документы ( я думаю, из-за того, что нигде в XAML не указано свойство Documents
, но не знаю, как ..):
<TreeView ItemsSource="{Binding Folders}">
<TreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type model:Folder}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type model:Document}">
<TextBlock Text="{Binding Name}" Background="Red"/>
</DataTemplate>
</TreeView.Resources>
</TreeView>
Спасибо за вашу помощь!