【问题标题】:Display "root" node in TreeView在 TreeView 中显示“根”节点
【发布时间】:2011-06-10 14:15:37
【问题描述】:

如何在 TreeView 中显示“根”?

我需要为根创建一个特殊的 HierarchicalDataTemplate 吗?

这是我的代码:

<TreeView Margin="0,0,15,0" Name="treeView1" ItemsSource="{Binding Path=Children}">           
  <TreeView.Resources>           
    <HierarchicalDataTemplate DataType="{x:Type local:Node}"
                              ItemsSource="{Binding Path=Children}">
      <Border BorderBrush="Black" BorderThickness="1">
        <StackPanel>
          <TextBlock Margin="10,0,0,0" Text="{Binding Data}"/>
        </StackPanel>
      </Border>
    </HierarchicalDataTemplate>
  </TreeView.Resources>
</TreeView>
Node node0 = new Node("Root");
Node node1 = new Node("Node1-1");
Node node12 = new Node("Node1-2");
Node node21 = new Node("Node2-1");
Node node22 = new Node("Node2-2");
Node node31 = new Node("Node3-1");
Node node9 = new Node("Node9");
node12.Children.Add(node21);
node12.Children.Add(node22);
node22.Children.Add(node31);
node1.Children.Add(node9);

node0.Children.Add(node1);
node0.Children.Add(node12);
treeView1.DataContext = node0;

public class Node
{      
    List<Node> children;
    public List<Node> Children
    {
        get { return children; }
        set { children = value; }
    }       

    string data;
    public string Data
    {
        get { return data; }
        set { data = value; }
    }

    public Node()
    {
        children = new List<Node>();
    }

    public Node(string data)
        : this()
    {
        this.data = data;
    }

}

【问题讨论】:

    标签: c# wpf xaml treeview


    【解决方案1】:

    如果你想要一个根,你需要指定一个ItemsSource,其中只有一个项目,根节点,它必须是一个IEnumerable,节点本身不能是源。

    例如

    treeView.ItemsSource = new [] { rootNode };
    

    【讨论】:

    • 我不明白,指定一个ItemsSource,里面只有一个项目?
    • 类似:treeView.ItemsSource = new List&lt;Node&gt;() { rootNode };
    【解决方案2】:

    使用转换器:

    public class RootTreeviewConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, 
          object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return null;
    
            return new object[] { value };
        }
    
        public object ConvertBack(object value, Type targetType,
          object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    在 XAML 中:

    <TreeView ItemsSource="{Binding Path=RootNode,Converter={StaticResource rootConv}}" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多