我正在尝试创建一个应用程序,我需要在树视图中显示员工及其部门的结构如下所示:
我怎么能用WPF做到这一点?
答案 0 :(得分:2)
正确的方法是使用HierarchicalDataTemplate
。我能想到的最基本的是:
<UserControl.Resources>
<HierarchicalDataTemplate
x:Key="RecursiveData" DataType="TreeViewItem" ItemsSource="{Binding Items}">
</HierarchicalDataTemplate>
</UserControl.Resources>
可以在XAML中使用如下:
<TreeView ItemTemplate="{StaticResource RecursiveData}" />
当然,您可以随意使用样式和子组件自定义模板。
请注意,TreeView的ItemSource
需要实际提供嵌套的TreeViewItem
,其中每个TreeViewItem在Items
中包含它的子项。
答案 1 :(得分:0)
如果您具有这样的结构:
public ObservableCollection<ChartOfAccount> ChartOfAccounts { get; set; }
public class ChartOfAccount
{
public Book Book { get; set; }
public List<LedgerHierarchy> ControlLedgers { get; set; }
}
public class LedgerHierarchy
{
public ControlLedger ControlLedger { get; set; }
public ObservableCollection<Ledger> Ledgers { get; set; }
}
您可以像这样直接在TreeView
中进行绑定:
<TreeView ItemsSource="{Binding ChartOfAccounts}"
BorderThickness="0"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemContainerStyle="{StaticResource treeStyle}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ControlLedgers}">
<TextBlock Text="{Binding Book.Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Ledgers}">
<TextBlock Text="{Binding ControlLedger.Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
而不是在HierarchicalDataTemplate
中创建Control.Resource
。