C# 如何对不同类型的嵌套对象使用wpf treeview
我有两门课想在树状视图中展示 在我的主窗口中,我有一个特定类型对象的可观察集合,称之为对象a。 对象a包含另一类对象(对象b)的可观察集合。 每个对象b包含对象b的可观察集合 例如,我可能有这样的东西 对象列表 -对象1 --对象的列表 ---反对意见 ----对象的列表 -----反对意见 -对象2 --对象的列表 ---反对意见 将treeview绑定到类似的东西时,我的xaml应该是什么样子的C# 如何对不同类型的嵌套对象使用wpf treeview,c#,wpf,treeview,C#,Wpf,Treeview,我有两门课想在树状视图中展示 在我的主窗口中,我有一个特定类型对象的可观察集合,称之为对象a。 对象a包含另一类对象(对象b)的可观察集合。 每个对象b包含对象b的可观察集合 例如,我可能有这样的东西 对象列表 -对象1 --对象的列表 ---反对意见 ----对象的列表 -----反对意见 -对象2 --对象的列表 ---反对意见 将treeview绑定到类似的东西时,我的xaml应该是什么样子的 抱歉,如果我没有解释清楚,我是wpf新手。我知道wpf非常危险,但我非常确定Hierarchyc
抱歉,如果我没有解释清楚,我是wpf新手。我知道wpf非常危险,但我非常确定HierarchycalDataTemplate是解决您问题的方法。我的XAML技能还不确定,所以我不能为您编写好的示例代码。下面是我如何在项目中使用HierarchycalDataTemplate的。我希望这能给你一些好主意
<TreeView Grid.Row="1"
Grid.Column="1"
ItemsSource="{Binding Children}"
SelectedItemChanged="TreeView_SelectedItemChanged"
ContextMenu="{StaticResource MenuContextMenu}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" >
<!--<TextBlock Text="{Binding Path=ItemName}" Margin="5,0,5,0" />-->
<Grid ContextMenu="{StaticResource ContextMenu}" >
<TextBlock Name="ShownItem"
Text="{Binding Path=ItemName}"
Margin="0,0,0,0" />
<TextBox Name="EditBox"
Text="{Binding Path=ItemName}"
Visibility="{Binding Path=Visibility}"
Style="{StaticResource EditableTextBox}"
IsVisibleChanged="EditBox_IsVisibleChanged"
PreviewKeyDown="EditBox_KeyDown"
Margin="0,2,0,2"
>
</TextBox>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
RB的想法是正确的。这就是WPF将模板应用于普通.NET对象的能力变得非常强大的地方
您需要指定两个层次数据模板
,一个用于a
类型的对象,另一个用于b
类型的对象。大概是这样的:
<TreeView>
<TreeView.Resources>
<HierarchicalDataTemplate TargetType="{x:Type local:a}">
<!-- XAML to display objects of type a -->
</HierarchialDataTemplate>
<HierarchicalDataTemplate TargetType="{x:Type local:b}">
<!-- XAML to display objects of type b -->
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
您需要为每个模板的ItemsSource
属性指定绑定,以便WPF知道从何处获取子对象。此外,还需要向根节点添加xmlns
声明,指定对象所在的命名空间(在上面的示例代码中由local
表示)