WPF中动态绑定的多级嵌套TreeView

5
我正在尝试创建一个应用程序,需要以以下树形结构显示员工及其所在部门:
  • 员工1
    • 部门
      • 部门1
      • 部门2
  • 员工2
    • 部门
      • 部门3
      • 部门4
如何使用WPF实现此功能?
2个回答

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中包含其子项。

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>

不要在Control.Resource中创建HierarchicalDataTemplate


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接