分层数据结构WPF TreeListView

时间:2009-11-16 22:05:42

标签: c# wpf xaml treeview hierarchicaldatatemplate

我目前正在编写WPF TreeListView。 我想知道几件事。

分层数据结构如何工作,子代可以显示其他属性而不是父代相同的属性? 目前我正在尝试使用列

进行treelistview

客户/事项/小时

如果我添加一个客户端,那么它具有相同的问题 父母将把孩子的小时数改为小时加起来的总小时数。

这是一个例子

我添加

约翰/书写纸/ 1小时
约翰/写作纸/ 2小时
约翰/书写纸/ .5小时

我的树列表视图将显示

约翰/书写纸/3.5小时<这是父母    - 约翰/书写纸/ 1小时
   - 约翰/书写纸/ 2小时
  -John /书写纸/ .5小时<这些是孩子们

相反,我希望它显示

John / WRiting Paper / 3.5小时
  - 上午12:00 - 下午1:00 /撰写介绍
  - 下午2:00 - 下午4:00 /写下了身体
  - 下午3:00 - 下午3:30 /写下结论

我正在使用两个可观察的集合。一个是父母,一个是孩子。

我的问题基本上是。我可以更改分层数据结构以显示不同的属性吗?不同的信息。我不希望重复显示相同的客户事项时数。 相反,我想为孩子显示不同的属性。由于父母将显示信息所属的人。 顺便说一句,我正在尝试为XAML和C#

这样做

先谢谢!!
-Kevin

2 个答案:

答案 0 :(得分:1)

您可以为HierarchicalDataTemplate设置DataTrigger,并具有不同的属性绑定。以下是一个例子。 Please check this earlier answer in this thread just in case you need more ideas.

 <HierarchicalDataTemplate  DataType="{x:Type local:Person}" ItemsSource="{Binding People}" >
    <Grid>
      <TextBlock x:Name="fName" Text="{Binding FirstName}"/>
      <TextBlock x:Name="lName" Text="{Binding LastName}" Visibility="Collapsed"/>
   </Grid>
   <HierarchicalDataTemplate.Triggers> 
    <DataTrigger Binding="{Binding State}" Value="A">
      <Setter TargetName="fName" Property="Visibility" Value="Collapsed"/>
       <Setter TargetName="lName" Property="Visibility" Value="Visible"/>
    </DataTrigger>
  </HierarchicalDataTemplate.Triggers> 
</HierarchicalDataTemplate>  

Jobi Joy

答案 1 :(得分:1)

如果您的父级和子级是不同的对象类型,则有一个非常简单的答案:只需在ResourceDictionary中使用多个HierarchicalDataTemplates:

<TreeView ItemsSource="{Binding Parents}">

  <TreeView.ResourceDictionary>

    <HierarchicalDataTemplate
        TargetType="{x:Type my:ParentType}"
        ItemsSource="{Binding Children}">

      ... parent content ...

    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate
        TargetType="{x:Type my:ChildType}"
        ItemsSource="{Binding Children}">

      ... child content ...

    </HierarchicalDataTemplate>

  </TreeView.ResourceDictionary>
</TreeView>

这种技术并不适用于所有场景,但是当它发挥作用时,它非常强大且富有表现力。

如果父和子类型相同但参数不同,则另一个变体是创建ItemTemplateSelector,调用LoadResource()以加载相应的名为HierarchicalDataTemplate,具体取决于数据值。