在WPF树视图中添加节点下的节点

时间:2012-06-26 21:54:42

标签: c# wpf

在Visual C ++ / MFC中,我们曾经将一个节点添加到树中,然后通过引用该节点,我们可以在父节点下添加子节点。但是,在WPF中没有我看到的这样的东西。我很困惑如何将子/孩子添加到节点?

任何帮助将不胜感激。

似乎已经有2个人知道MVVM了!

解决方案由Tim提供。

4 个答案:

答案 0 :(得分:11)

由于OP说我的评论真的是他认为的答案,我想我会继续把它变成答案。

问题中描述的是如何在WPF中完成的。例如:

var item = new TreeViewItem(); 
myTreeView.Items.Add(item); 
var subItem1 = new TreeViewItem(); 
var subItem2 = new TreeViewItem(); 
item.Items.Add(subItem1); 
item.Items.Add(subItem2);

那会添加一堆空白项目。

您可以使用每个TreeViewItem的Header属性来控制显示的内容,并使用Tag属性来保存数据,如果您想要使用该路径。

然而,最好去绑定路由并使用HierarchicalDataTemplates来控制外观。这样您就不会为数据手动创建这些假容器(TreeViewItems)。

我建议您阅读HierarchicalDataTemplates,因为这样可以让您对过程如何处理绑定提供合理的概述。也只是在MVVM上阅读。

答案 1 :(得分:7)

快速谷歌搜索“wpf treeview”发现了几篇关于如何在WPF中正确使用树视图的精彩文章。

示例1: http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode

示例2: http://www.c-sharpcorner.com/uploadfile/mahesh/treeview-in-wpf/

这应该让你开始 - 当你尝试MVVM方法并提出更具体的问题时更新你的问题。

答案 2 :(得分:1)

像这样创建你的模型

public class WrappedNode
{
    public string Name { get; set; }
    public ObservableCollection<WrappedNode> Nodes { get; set; }

    public WrappedNode()
    {
        Nodes = new ObservableCollection<WrappedNode>();
    }        
}

要绑定到treeview的节点列表

private ObservableCollection<WrappedNode> _nodeList;
public ObservableCollection<WrappedNode> NodeList
{
    get { return _nodeList; }
    set
    {
        _nodeList = value;
        RaisePropertyChanged(() => NodeList);
    }
}

在xaml:

    <TreeView Grid.Row="1"
              ItemsSource="{Binding NodeList}">
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type scnvm:WrappedNode}" ItemsSource="{Binding Nodes}">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>

如果您希望节点有子节点,只需将子节点添加到该节点的节点属性

答案 3 :(得分:0)

将项目添加为父级:

var item = new TreeViewItem();
item.Header = "First Element";
tree.Items.Add(item); //tree is your treeview

要将元素添加为特定元素的子元素:

var subItem = new TreeViewItem();
subItem.Header = "Subitem";
var parent = tree.SelectedItem as TreeViewItem;  // Checking for selected element
parent.Items.Add(subItem);