TreeView должен рекурсивно заполняться другой коллекцией.
Я смог идеально заполнить, когда у меня был только один тип коллекции со второго уровня. Но теперь у меня есть требование обрабатывать две разные коллекции после второго уровня.
Я попытался создать Observable Collection класса ViewModelBase, который фактически распространяется на все остальные классы ViewModel, думая, что я могу использовать экземпляр ViewModel любого типа для Observable Collection. Но это будет работать, когда мне не придется работать с двумя разными коллекциями одновременно.
<HierarchicalDataTemplate DataType="{x:Type VM:ViewModelBase}" ItemsSource="{Binding SecondViewModelCollection}">
<StackPanel Orientation="Horizontal" >
<Image Source="../resources/New_Package.png" Width="15" Height="15"/>
<TextBlock Text="{Binding Header}" Loaded="Project_Loaded"></TextBlock>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type VM:ViewModelBase}" ItemsSource="{Binding ThirdViewModelCollection}">
<StackPanel Orientation="Horizontal" >
<Image Source="../resources/New_Package.png" Width="15" Height="15"/>
<TextBlock Text="{Binding Header}"></TextBlock>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type VM:ViewModelBase}" ItemsSource="{Binding FourthViewModelBaseCollection}">
<StackPanel Orientation="Horizontal">
<Image Source="../resources/New_Package.png" Width="15" Height="15"/>
<TextBlock Text="{Binding Header}" MouseDown="TextBlock_MouseUp"
Loaded="TextBlock_Loaded" Focusable="True"/>
<TextBox LostFocus="TextBox_LostFocus" Visibility="Collapsed" MouseEnter="TextBox_MouseEnter"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type VM:ViewModelBase}" ItemsSource="{Binding FeatureViewModelCollection}">
<StackPanel Orientation="Horizontal">
<Image Source="../resources/file.png" Width="15" Height="15"/>
<TextBlock Text="{Binding Header}"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type VM:ViewModelBase}" ItemsSource="{Binding Usecaselist}">
<StackPanel>
<TextBlock Text="{Binding Header}" MouseDown="TextBlock_MouseUp"
Loaded="TextBlock_Loaded" Focusable="True" />
<TextBox LostFocus="TextBox_LostFocus" Visibility="Collapsed" MouseEnter="TextBox_MouseEnter"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate DataType="{x:Type VM:ViewModelBase}">
<StackPanel >
<TextBlock Text="{Binding Header}" MouseDown="TextBlock_MouseUp"
Loaded="TextBlock_Loaded" Focusable="True" />
<TextBox
LostFocus="TextBox_LostFocus" Visibility="Collapsed"
MouseEnter="TextBox_MouseEnter" >
</TextBox>
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(String propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
> Level 1
> Level 2.1 (Diff class with diff. collection)
> Level 3.1 (Diff from other 3.1)
> Level 4.1
> Level 4.2
> Level 3.2 (Diff from other 3.2)
> Level 3.3 (Diff from other 3.3)
> Level 2.2 (Diff class with diff. collection)
> Level 3.1 (Diff from other 3.1)
> Level 3.2 (Diff from other 3.2)
> Level 2.3 (Diff class with diff. collection)
> Level 3.1 (Diff from other 3.1)
> Level 3.2 (Diff from other 3.2)
Теперь объекты ThirdViewModelCollection имеют два типа, не только тип данных/объект отличается, но и коллекция внутри них будет отличаться отсюда.