在Visual C ++ / MFC中,我们曾经将一个节点添加到树中,然后通过引用该节点,我们可以在父节点下添加子节点。但是,在WPF中没有我看到的这样的东西。我很困惑如何将子/孩子添加到节点?
任何帮助将不胜感激。
似乎已经有2个人知道MVVM了!解决方案由Tim提供。
答案 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);