我目前正在编写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
答案 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>
答案 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
,具体取决于数据值。