gpt4 book ai didi

c# - 具有分层数据模板和多种类型的 WPF TreeView

转载 作者:行者123 更新时间:2023-12-02 09:44:08 24 4
gpt4 key购买 nike

我有一个使用 HierarchicalDataTemplate 创建的 TreeView ,您可以在下面的代码中看到:

  <TreeView ItemsSource="{Binding AllFolders}" SelectedItemChanged="TreeView_SelectedItemChanged"/>

还有

            <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>

它工作得很好,但现在我需要在文件夹中添加其他类型的对象来制作如下 TreeView :

  • 文件夹 1
  • 文件夹 2
    • 工具
      • 工具 1
      • 工具2
    • 地点
      • 地点 1
      • 地点 2
  • 文件夹 3

工具和位置必须使用不同的数据模板。它们都是包含在文件夹类中的 IList( IList<Tool>IList<Location> )。

有可能做到吗?我怎样才能实现这一目标?

感谢您的帮助

最佳答案

如果您执行以下选项之一,则可以执行此操作:

1) 使用 ObservableCollection<object> 类型的集合属性这样您就可以向其中添加任何对象类型。

2) 定义 Folder 的接口(interface)或基类和Tool类实现(或扩展),然后使用 ObservableCollection<YourInterface> 类型的集合属性或ObservableCollection<YourBaseClass>这样您就可以向其中添加任何对象类型。

然后,定义多个 DataTemplate根据需要设置,但不要设置任何 x:Key对他们的指令。这样,当框架遇到集合中的不同对象时,它们都将由框架显式应用。

<小时/>

更新>>>

再次查看您所需的文件夹结构,您似乎只有一种类型作为顶级节点,即 ToolLocation对象是 Folder 的子对象对象。如果是这样,那么您可以使用 Folder 的集合。对象只要 Folder类具有名为 Folders 的集合属性和Locations .

在这种情况下,您只需提供 HierarchicalDataTemplate对于这两种类型以及 Folder类。

<小时/>

更新2>>>

您可以定义更多HierarchicalDataTemplate s,其中一个为Tool一个为 Location类...只要您提供 x:Key指令,它们将由框架隐式应用:

<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>

但是,要执行此操作,您需要更改 Folder 中的集合如上所述,这样您就可以添加顶级 ToolLocation里面的物体在一起。如果这些顶级对象只是实际项目的“文件夹”,那么您也可以删除它们,因为它们使您的代码变得更加棘手。

关于c# - 具有分层数据模板和多种类型的 WPF TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26042211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com