C# 层次数据结构WPF TreeListView数据触发器

C# 层次数据结构WPF TreeListView数据触发器,c#,wpf,xaml,treeview,C#,Wpf,Xaml,Treeview,我正在尝试创建一个树列表视图,该视图显示的信息与父视图不同 从现在的情况来看,子对象显示的信息与父对象相同。我在想,我该怎么做。我的上一篇文章对我来说不是很有意义,它的效果不是很好。我想知道是否有人能为我更深入地解释这一点 这是最后一篇帖子: 你的问题源于你的父母和孩子属于同一类型。两者都使用相同的模板,这里需要的是分层的数据结构 如果您有一个父任务,它有一个子任务集合,并且子任务的类型与父任务不同,那么您会很酷。(因为您可以为子级提供与父级不同的模板) 另一种方法是构建一个视图模型,具有两

我正在尝试创建一个树列表视图,该视图显示的信息与父视图不同

从现在的情况来看,子对象显示的信息与父对象相同。我在想,我该怎么做。我的上一篇文章对我来说不是很有意义,它的效果不是很好。我想知道是否有人能为我更深入地解释这一点

这是最后一篇帖子:



你的问题源于你的父母和孩子属于同一类型。两者都使用相同的模板,这里需要的是分层的数据结构

如果您有一个父任务,它有一个子任务集合,并且子任务的类型与父任务不同,那么您会很酷。(因为您可以为子级提供与父级不同的模板)

另一种方法是构建一个视图模型,具有两种不同的类型,一种用于任务概述,另一种用于子任务

然而,我发现了一种基于集合大小使用触发器的黑客解决方案(当count为0时,我假设它是一个叶节点),更好的方法是在对象上有一个属性,该属性说明它是哪种类型,父节点还是子节点,这可以很容易地使用视图模型来完成,或者可以将该属性放在业务对象上。并下载TreeViewTest.zip示例解决方案

上述项目不是一个理想的解决方案。我每次都创建视图模型。它提供了超出直接wpf的灵活性和控制能力

该项目包含这段代码,这是一个棘手的问题(注意绑定上的字符串格式,它们非常酷)


如果要在树视图中显示父子关系。(只有一层深,因此子节点都是叶节点)。将树视图绑定到父元素集合。然后,为父对象创建分层数据模板,为子对象创建标准数据模板

在您给出的示例中,您有一个对象类型为信息的父对象,该父对象具有子对象类型的集合详细信息,父对象上的详细信息(子对象)集合称为子对象

所以我们为孩子们做了一个模板,然后为父母做了一个模板

  <!--Child (detail) DataTemplate-->
  <DataTemplate
     DataType="{x:Type local:detail}">
     <TextBox Text="{Binding Path=Some child binding}"/>
  </DataTemplate>

  <!--Parent (information) Hierarchical Template-->
  <HierarchicalDataTemplate
     DataType="{x:Type local:information}"
     ItemsSource="{Binding Path=Child}">
     <TextBox Text="{Binding Path=Some parent binding}"/>
  </HierarchicalDataTemplate>


由于父对象和子对象属于不同的对象类型,树视图将获取父模板,该模板具有项目源,在绘制子对象时将使用子数据模板。请注意,所有数据模板都没有键,它们是在对象类型上设置键的。

这就是我拥有的我有一个observableCollection父级在父级下我有一个observableCollection子级。我想让孩子们展示与父母不同的东西,但我似乎无法让它发挥作用。知道吗?基本上是c语言,我有父[0];父项[0]。任务;父[0]。子[0]。开始时间;父[0]。子[0]。结束时间;因此,在上面,我试图用客户机名称和与之关联的任务显示初始treelistview。显示的子对象将显示该任务的开始时间和结束时间。哦,我忘了说父对象可观察集合是信息。并且子级是一个类型细节,例如observablecollection父级=新observablecollection;observablecollection子项=新的observablecollection;我在做树视图,不是树视图。树列表视图是一个有很多列的视图,而不是像treeview那样只有一列。由于某些原因,我仍然无法使其正常工作。如果您正在创建自己的控件,该控件的父控件和子控件具有相同的列,则父控件和子控件上必须具有相同的字段。或者你想为父母和孩子们写不同的专栏?我有两门课。有一类叫做信息。一个名为Detail的类有三个不同的列。一个saids客户端、任务、描述。在这些项下,父项将按客户端、任务和描述命名。对于每个客户机,在客户机下都有一个子机,在任务下会显示“开始时间”,在描述下会显示“结束时间”,在描述下会显示“总小时”
      <HierarchicalDataTemplate
        DataType="{x:Type local:Assignment}"
        ItemsSource="{Binding Path=AssignmentCollection}">
        <Grid>
           <TextBlock
           x:Name="parentTextBox">
           <TextBlock.Text>
              <MultiBinding
                 StringFormat="{}{0} - {1} - {2:F2}">
                 <Binding
                    Path="ClientName" />
                 <Binding
                    Path="Task" />
                 <Binding
                    Path="Hours" />
              </MultiBinding>
           </TextBlock.Text>    
        </TextBlock>
           <TextBlock
           x:Name="childTextBox" Visibility="Collapsed">
           <TextBlock.Text>
              <MultiBinding
                 StringFormat="{}{0:hh:mm tt} - {1:hh:mm tt} /{2}">
                 <Binding
                    Path="StartTime" />
                 <Binding
                    Path="EndTime" />
                 <Binding
                    Path="SubTask" />
              </MultiBinding>
           </TextBlock.Text>    
        </TextBlock>
        </Grid>
        <!--this is the trigger that chooses which text box to display-->
        <HierarchicalDataTemplate.Triggers>
           <DataTrigger
              Binding="{Binding AssignmentCollection.Count}"
              Value="0">
              <Setter
                 TargetName="parentTextBox"
                 Property="Visibility"
                 Value="Collapsed" />
              <Setter
                 TargetName="childTextBox"
                 Property="Visibility"
                 Value="Visible" />
           </DataTrigger>
        </HierarchicalDataTemplate.Triggers>
     </HierarchicalDataTemplate>
  <!--Child (detail) DataTemplate-->
  <DataTemplate
     DataType="{x:Type local:detail}">
     <TextBox Text="{Binding Path=Some child binding}"/>
  </DataTemplate>

  <!--Parent (information) Hierarchical Template-->
  <HierarchicalDataTemplate
     DataType="{x:Type local:information}"
     ItemsSource="{Binding Path=Child}">
     <TextBox Text="{Binding Path=Some parent binding}"/>
  </HierarchicalDataTemplate>