以下のように、ツリービューのような構造で従業員とその部門を表示する必要があるアプリケーションを作成しようとしています。
- 従業員1
- デパートメント
- 部門1
- 部門2
- デパートメント
- 従業員2
- デパートメント
- 部門3
- 部門4
- デパートメント
どうすればこれをWPFで行うことができますか?
以下のように、ツリービューのような構造で従業員とその部門を表示する必要があるアプリケーションを作成しようとしています。
どうすればこれをWPFで行うことができますか?
これを行う正しい方法は、HierarchicalDataTemplate
. 私が想像できる最も基本的なものは次のとおりです。
<UserControl.Resources>
<HierarchicalDataTemplate
x:Key="RecursiveData" DataType="TreeViewItem" ItemsSource="{Binding Items}">
</HierarchicalDataTemplate>
</UserControl.Resources>
次のように XAML で使用できます。
<TreeView ItemTemplate="{StaticResource RecursiveData}" />
もちろん、スタイルとサブコンポーネントを使用してテンプレートを自由にカスタマイズできます。
TreeViewの は、各 TreeViewItem にサブアイテムが含まれるItemSource
ネストされた を実際に提供する必要があることに注意してください。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
。