我正在尝试创建一个应用程序,在该应用程序中,我需要在树视图中显示员工及其部门,如下所示:
- 员工1
- 部门
- 部门1
- 二部
- 部门
- 员工2
- 部门
- 部门3
- 第四部
- 部门
我怎么能用 WPF 做到这一点?
我正在尝试创建一个应用程序,在该应用程序中,我需要在树视图中显示员工及其部门,如下所示:
我怎么能用 WPF 做到这一点?
正确的方法是使用HierarchicalDataTemplate
. 我能想象的最基本的是以下内容:
<UserControl.Resources>
<HierarchicalDataTemplate
x:Key="RecursiveData" DataType="TreeViewItem" ItemsSource="{Binding Items}">
</HierarchicalDataTemplate>
</UserControl.Resources>
可以在 XAML 中使用如下:
<TreeView ItemTemplate="{StaticResource RecursiveData}" />
当然你可以随意自定义模板的样式和子组件。
请注意,ItemSource
您的 TreeView 需要实际提供嵌套TreeViewItem
的 s,其中每个 TreeViewItem 都包含它的子项Items
。
如果你有这样的结构:
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
.