0

私がここで抱えている奇妙な問題のようなものです。

私はかなり基本的な再帰的なツリー構造を持っています:

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

上記のビューでは、 が先行するノードのみに+チェックボックスが必要です。

4

1 に答える 1