私がここで抱えている奇妙な問題のようなものです。
私はかなり基本的な再帰的なツリー構造を持っています:
public class TreeNode
{
public string Name { get; set; }
public IEnumerable<TreeNode> Children { get; set; }
}
次のように、HierarchicalDataTemplate を使用して TreeView にデータを表示しています。
<TreeView Name="_tree">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal" >
<CheckBox/>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
コード ビハインドからツリーを作成します。
//allTreeNodes is a list of all existing Tree objects
public void PopulateTree(List<TreeNode> allTreeNodes)
{
foreach (var node in allTreeNodes)
{
_tree.Items.Add(node);
}
}
結果は、既存の各 Tree オブジェクトをそれぞれのサブツリーを持つルート ノードとして持つ TreeView になります。
各 TreeNode は、祖先があるかどうかに応じて、ツリー内の複数の場所に表示できることに注意してください。
ここまでは問題なく動作していますが、ここでやりたいことは、ビジュアルルート ノードのみにチェックボックスを表示することだけです。TreeNode の追加のブール値プロパティに基づいてテンプレートを選択し、2 つの HierarchicalDataTemplates で DataTemplateSelector を使用しようとしましたが、これは機能しません。
どんな助けでも大歓迎です。
編集:これは、私が欲しいものを説明するのに役立つダミーデータです。(データに循環参照がないことにも注意してください。)
+TreeNodeA
-TreeNodeB
-TreeNodeC
-TreeNodeB
+TreeNodeB
+TreeNodeC
-TreeNodeB
+TreeNodeD
-TreeNodeE
-TreeNodeC
-TreeNodeB
+TreeNodeE
-TreeNodeC
-TreeNodeB
上記のビューでは、 が先行するノードのみに+
チェックボックスが必要です。