Des*_*xav 2 c# wpf treeview hierarchicaldatatemplate
我有一个使用HierarchicalDataTemplate创建的树视图,您可以在下面的代码中看到:
<TreeView ItemsSource="{Binding AllFolders}" SelectedItemChanged="TreeView_SelectedItemChanged"/>
Run Code Online (Sandbox Code Playgroud)
和
<HierarchicalDataTemplate DataType="{x:Type model:Folder}" ItemsSource="{Binding Tools}">
<StackPanel Orientation="Horizontal">
<Image Source="{StaticResource ResourceKey=icon}"/>
<TextBlock Text="{Binding Title}"/>
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type model:Tool}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
它运行良好,但现在我需要在文件夹中添加其他类型的对象,以使树视图像这样:
工具和位置必须使用不同的DataTemplate.它们都是IList包含在Folder Class(IList<Tool>和IList<Location>)中.
它甚至可以做到吗?我怎样才能做到这一点?
谢谢你的帮助
如果您执行以下选项之一,则可以执行此操作:
1)使用类型的集合属性,ObservableCollection<object>以便可以向其中添加任何对象类型.
2)定义的接口或基类的Folder和Tool类实现(或延伸),然后使用所述类型的集合属性ObservableCollection<YourInterface>或ObservableCollection<YourBaseClass>,以便可以添加任何对象类型到它.
然后,根据DataTemplate需要定义多个s,但不要x:Key在它们上设置任何指令.通过这种方式,当它遇到集合中的不同对象时,它们将全部由Framework明确应用.
更新>>>
再看一下您想要的文件夹结构,看起来您只有一种类型作为顶级节点,其中Tool和Location对象是对象的子节点Folder.如果是这样,那么你可以使用的集合Folder对象,只要Folder类已经集合属性命名Folders和Locations.
在这种情况下,您可以HierarchicalDataTemplate为这两种类型以及Folder类提供.
更新2 >>>
你可以定义更多的HierarchicalDataTemplates,一个用于类Tool,一个用于Location类......只要你不提供x:Key指令,它们将由Framework隐式应用:
<HierarchicalDataTemplate DataType="{x:Type model:Tool}" ItemsSource="{Binding Tools}">
<StackPanel Orientation="Horizontal">
<Image Source="{StaticResource ResourceKey=icon}"/>
<TextBlock Text="{Binding Title}"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type model:Location}" ItemsSource="{Binding Locations}">
<StackPanel Orientation="Horizontal">
<Image Source="{StaticResource ResourceKey=icon}"/>
<TextBlock Text="{Binding Title}"/>
</StackPanel>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
但是,要执行此操作,您需要更改Folder类中的集合,如上所述,以便您可以同时添加顶层Tool和Location对象.如果这些顶级对象只是实际项目的"文件夹",那么您也可以删除它们,因为它们会使您的代码变得更加棘手.
| 归档时间: |
|
| 查看次数: |
2360 次 |
| 最近记录: |