Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF树视图中的节点下添加节点_C#_Wpf - Fatal编程技术网

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

C# 在WPF树视图中的节点下添加节点,c#,wpf,C#,Wpf,在visualc++/MFC中,我们习惯于将节点添加到树中,然后通过引用该节点,我们可以在父节点下添加子节点。然而,在WPF中没有我所看到的东西。我不知道如何将子节点添加到节点 任何帮助都将不胜感激 似乎已经有两个人知道MVVM了 下面是Tim给出的解决方案。一个快速的谷歌搜索“wpf treeview”找到了几篇关于如何在wpf中正确使用treeview的好文章 例1: 例2: 这应该让你开始——当你尝试MVVM方法并有更具体的问题时,更新你的问题。既然OP说我的评论确实是他认为的答案,我

在visualc++/MFC中,我们习惯于将节点添加到树中,然后通过引用该节点,我们可以在父节点下添加子节点。然而,在WPF中没有我所看到的东西。我不知道如何将子节点添加到节点

任何帮助都将不胜感激

似乎已经有两个人知道MVVM了

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

一个快速的谷歌搜索“wpf treeview”找到了几篇关于如何在wpf中正确使用treeview的好文章

例1:

例2:


这应该让你开始——当你尝试MVVM方法并有更具体的问题时,更新你的问题。

既然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);
这将添加一堆空白项

如果您想通过该路径,可以使用每个TreeView项目的Header属性来控制显示的内容,并使用Tag属性来保存数据

不过,最好是通过绑定路径,使用HierarchycalDataTemplates来控制外观。这样,您就不会手动为数据创建这些假容器(TreeViewItems)


我建议您仔细阅读,这样您就可以大致了解流程应该如何使用绑定。另外,请阅读MVVM概述。

像这样创建您的模型

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

    public WrappedNode()
    {
        Nodes = new ObservableCollection<WrappedNode>();
    }        
}
公共类WrappedNode
{
公共字符串名称{get;set;}
公共ObservableCollection节点{get;set;}
公共WrappedNode()
{
节点=新的ObservableCollection();
}        
}
要绑定到treeview的节点列表

private ObservableCollection<WrappedNode> _nodeList;
public ObservableCollection<WrappedNode> NodeList
{
    get { return _nodeList; }
    set
    {
        _nodeList = value;
        RaisePropertyChanged(() => NodeList);
    }
}
private observeCollection\u nodeList;
公共可观测集合节点列表
{
获取{return\u nodeList;}
设置
{
_节点列表=值;
RaisePropertyChanged(()=>节点列表);
}
}
在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>


如果希望节点具有子节点,只需将子节点添加到该节点的“节点”属性即可添加项作为父节点:

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);

事实上,如果你不使用绑定,这正是你在WPF中所做的…@Tim在这种情况下,你只能添加一项,如果你尝试向项添加子项(ren),selectedItem将返回null。什么?您是对的,您不能在一个调用中完成(ItemCollection上没有AddRange(…)函数),但您可以添加更多<代码>变量项=新树视图项();myTreeView.Items.Add(item);var subItem1=新的树视图项();var subItem2=新的树视图项();项目.项目.添加(子项目1);项目.项目.添加(子项目2)或作为循环的一部分执行。我看不出问题出在哪里。@Tim感谢它能工作,但如何为每个节点分配数据/值?能在这里给我指点方向吗?对!!!!!!我不敢相信我错过了。非常感谢你为我节省了很多时间。我认为这是解决这个问题的办法。谢谢你,第一个例子,我发现了它,但希望有一个较短的路径,使它的工作,但似乎没有捷径。第二个例子是我所做的,不会有帮助,甚至它的代码是错误的(尝试zip文件删除将不起作用,不会告诉你必须添加子节点,我已经添加了父节点…我正在寻找添加子节点),所以我将与第一个花时间学习它。不管怎样,我有点想知道人们是如何否定我的问题的,但他们没有得到回答。谢谢你,好的,我看了第一个示例,对MVVM有了一些想法,但老实说,我不知道如何开始用它编写一个简单的程序。有人能帮我一下吗?我可以看到视图与数据等的分离,但不知道如何开始,甚至不知道如何将这些东西联系在一起。任何建议都将不胜感激。WPF/MVVM入门-如果你开始使用WPF,MVVM真的是城里唯一的游戏-WPF是基于MVC的概念构建的,MVVM是特定于WPF的MVC的实现,而这从技术上来说是对提出的问题的答案(因此我+1)建议使用HierarchycalDataTemplates,并坚持使用solid MVVM,这将对OP最有帮助。如果您想在订单中的某个位置添加项目,则会出现-->树对象为空的异常。有什么想法吗?