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