【发布时间】:2019-09-10 13:25:01
【问题描述】:
TreeView 必须以递归方式填充不同的集合。
当我从第二级只有一种类型的集合时,我能够完美地填充。但是现在我需要在二级之后处理两个不同的集合。
我尝试创建 ViewModelBase 类的 Observable Collection,它实际上扩展到所有其他 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的Objects有两种类型,不只是datatype/object不同,它们里面的collection也会和这里不同。
【问题讨论】:
标签: c# wpf xaml treeview itemsource