gpt4 book ai didi

c# - 将子节点添加到 wpf 中的 TreeView 控件,c#

转载 作者:太空狗 更新时间:2023-10-30 01:27:36 24 4
gpt4 key购买 nike

我已经在按钮点击事件上实现了一个 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”

我的问题是在运行时以分层数据格式在 TreeView 中实时显示数据?

这是一个解决方案,但最初的问题是在这样的层次结构中显示它:

词汇 1

|

| - Taxonomy1, Tid1

| - Taxonomy2, Tid2

词汇 2

|

| - 分类法 1,Tid3

| - 分类法 2,Tid4

最佳答案

您的数据结构不支持父/子关系,因此您的用户界面也不支持。

首先是添加一个 Children类型属性 ObservableCollection<TaxonomyData>给你的TaxonomyData类。

要显示这些项目,您需要使用 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"));
}

这将为当前选择的项目添加一个子项,如果没有当前选择的项目,它将把它添加到顶级集合中。

在任何情况下,您的代码都不应触及 Items TreeView 的属性(property),就像您现在的代码一样。 TreeView由数据绑定(bind)填充。管理TaxonomyCollection收集和数据绑定(bind)将处理 TreeView s 项目给你。

关于c# - 将子节点添加到 wpf 中的 TreeView 控件,c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2544624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com