Dato che qui ci sono molte o più relazioni, ad esempio il gruppo può avere una lista di oggetti che può avere l'elenco dei materiali e l'elenco dei gruppi a cui appartiene ... in modo simile il materiale può avere un elenco di oggetti .. quindi i tuoi modelli dovrebbero essere come sotto:
public class Group
{
ObservableCollection<Object> Objects { get; set; }
}
public class Object
{
ObservableCollection<Material> Materials { get; set; }
ObservableCollection<Group> Groups { get; set; }
}
public class Material
{
ObservableCollection<Object> Objects { get; set; }
}
Ora per mostrare i dati gerarchici è possibile utilizzare TreeView per rappresentarlo e definire HierarchicalDataTemplates a seconda del numero di visualizzazioni, ad es. per GroupHierarchy e MateraialHierarchy è possibile avere template come:
Gerarchia di gruppo:
<HierarchicalDataTemplate x:Key="GroupTemplate" ItemsSource="{Binding Objects}">
<StackPanel>
<TextBlock Text="{Binding GroupName}"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Materials}">
<TextBlock Text="{Binding ObjectName}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding MaterialName}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
Gerarchia dei materiali:
<HierarchicalDataTemplate x:Key="MaterialTemplate" ItemsSource="{Binding Objects}">
<StackPanel>
<TextBlock Text="{Binding MaterialName}"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Groups}">
<TextBlock Text="{Binding ObjectName}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding GroupName}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
Ora puoi utilizzare ItemTemplateSelector
per restituire il modello corretto per TreeView
quando cambi il ItemsSource
di TreeView