[英]adding child nodes to a treeview control in wpf,c#
我已经在buttonclick事件上实现了一个treeview控件,如下所示:
namespace TaxonomyTreeview
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
ObservableCollection<TaxonomyData> _TaxonomyCollection = new ObservableCollection<TaxonomyData>();
public Window1()
{
InitializeComponent();
}
public ObservableCollection<TaxonomyData> TaxonomyCollection
{ get { return _TaxonomyCollection; } }
private void SelectedTaxonomyChanged(object sender,
RoutedPropertyChangedEventArgs<Object> e)
{
TaxonomyData taxo = taxonomytree.SelectedItem as TaxonomyData;
if (taxo != null)
{
MessageBox.Show("" + taxo.Tid);
}
}
public class TaxonomyData
{
private string _name;
private string _tid;
public string Tid
{
get { return _tid; }
set { _tid = value; }
}
public string Name
{
get { return _name; }
set { _name = value; }
}
public TaxonomyData(string name, string tid)
{
Name = name;
Tid = tid;
}
}
private void populate_Click(object sender, RoutedEventArgs e)
{
taxonomytree.Items.Clear();
TaxonomyCollection.Add(new TaxonomyData("Taxonomy1", "1"));
taxonomytree.Items.Add(TaxonomyCollection[0]);
}
}
}
xaml代码是:
<Window x:Class="TaxonomyTreeview.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="435" Width="458" Loaded="Window_Loaded">
<Grid>
<TextBox Height="23" Margin="20,9,0,0" Name="startvid" VerticalAlignment="Top" HorizontalAlignment="Left" Width="120" />
<TextBox Height="23" Margin="165,9,151,0" Name="endvid" VerticalAlignment="Top" />
<Button Height="23.78" HorizontalAlignment="Right" Margin="0,8.22,11,0" Name="populate" VerticalAlignment="Top" Width="115" Click="populate_Click">Populate</Button>
<TreeView HorizontalAlignment="Left" Margin="20,53,0,144" Width="120" Name="taxonomytree" ItemsSource="{Binding Window1.TaxonomyCollection}"
SelectedItemChanged="SelectedTaxonomyChanged">
<TreeView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
正如我想要显示层次结构中的结构,我想知道将子节点添加到此的最佳方法是什么
请帮忙
更新:
但这并没有解决问题
如何将子对象分配给“Taxonomy1”,“Tid = 1”
我的问题是在运行时实时在树视图中以分层数据格式显示数据?
这是一个解决方案,但最初的问题是将其显示在这样的层次结构中:
词汇1
|
| - Taxonomy1,Tid1
| - Taxonomy2,Tid2
词汇2
|
| - 分类1,Tid3
| - 分类2,Tid4
您的数据结构不支持父/子关系,因此您的UI也无法实现。
首先ObservableCollection<TaxonomyData>
在您的TaxonomyData
类中添加一个ObservableCollection<TaxonomyData>
类型的Children
属性。
要显示这些项,您需要使用HierarchicalDataTemplate
。 这就像普通的DataTemplate
除了它有一个ItemsSource
属性,告诉它在哪里获取项目的子对象。 模板本身生成它生成的TreeViewItem
的标头, ItemsSource
告诉它从哪里获取子项:
<HierarchicalDataTemplate DataType="{x:Type TaxonomyData}"
ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
要添加新项,可以使Click
事件处理程序看起来像这样:
if (taxonomytree.SelectedItem == null)
{
TaxonomyCollection.Add(new TaxonomyData("foo", "bar");
}
else
{
TaxonomyData td = (TaxonomyData) taxonomytree.SelectedItem;
td.Children.Add(new TaxonomyData("foo", "bar"));
}
这将为孩子添加当前选定的项目,如果没有当前选择的项目,则会将其添加到顶级集合。
在任何情况下,您的代码都不应该像您现有的代码那样触及TreeView
的Items
属性。 TreeView
由数据绑定填充。 管理TaxonomyCollection
集合,数据绑定将为您处理TreeView
的项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.