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

时间:2011-06-16 10:00:46

标签: wpf treeview dynamic-binding

我正在尝试创建一个应用程序,我需要在树视图中显示员工及其部门的结构如下所示:

  • Employee1
      • DEPT1
      • DEPT2
  • 和Employee2
      • Dept3
      • Dept4

我怎么能用WPF做到这一点?

2 个答案:

答案 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