在 Visual C++/MFC 中,我们曾经向树中添加一个节点,然后通过引用该节点,我们可以在父节点下添加子节点。但是,在 WPF 中,我没有看到这样的东西。我很困惑如何将子/子添加到节点?
任何帮助将不胜感激。
似乎 2 人已经知道 MVVM 了!
下面的 Tim 给出了解决方案。
由于 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。
快速谷歌搜索“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 方法并有更具体的问题时更新您的问题。
像这样创建你的模型
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 属性
要将项目添加为父项:
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);