6

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

任何帮助将不胜感激。

似乎 2 人已经知道 MVVM 了!

下面的 Tim 给出了解决方案。

4

4 回答 4

12

由于 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。

于 2012-06-28T18:30:52.480 回答
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 方法并有更具体的问题时更新您的问题。

于 2012-06-26T22:27:39.813 回答
1

像这样创建你的模型

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

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

要绑定到树视图的节点列表

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>

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

于 2015-06-05T07:38:02.890 回答
1

要将项目添加为父项:

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);
于 2018-03-10T14:31:20.283 回答