C# 如何将treeview与来自对象的数据绑定(WPF XAML)
我正试图用我列表中的数据在WPF中创建treeview,但我无法这样做C# 如何将treeview与来自对象的数据绑定(WPF XAML),c#,wpf,data-binding,treeview,C#,Wpf,Data Binding,Treeview,我正试图用我列表中的数据在WPF中创建treeview,但我无法这样做 public class Student { public string Department { get; set; } public string studentname { get; set; } public string code { get; set; } } List<Student> Students = new List<Student>(); 我希望在T
public class Student
{
public string Department { get; set; }
public string studentname { get; set; }
public string code { get; set; }
}
List<Student> Students = new List<Student>();
我希望在Treeview中可以这样表示:
+ A
John 1
Rocky 4
Donald 6
+ B
Tonny 2
+ C
Jai 3
Mickey 5
树视图是分层的,根据您的对象,您需要以不同的方式查看可视化树,您的左栏学生重复系,最好是查看系有学生在树上获得所需的输出。这不是实现这一点的最佳或唯一方法,但它展示了构建所需的结构 创建一个新的WPF项目 在MainWindow.xaml中
<Window x:Class="WpfTestTreeView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTestTreeView"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TreeView x:Name="tvDepts">
<TreeView.Resources>
<!-- Top level template -->
<HierarchicalDataTemplate DataType="{x:Type local:Department}" ItemsSource="{Binding Students}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
<!-- Child node template -->
<DataTemplate DataType="{x:Type local:Student}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name: " FontWeight="Bold" />
<TextBlock Text="{Binding StudentName}" />
<TextBlock Text=" Code: " FontWeight="Bold" />
<TextBlock Text="{Binding Code}" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
</Window>
在MainWindow.xaml.cs中
using System.Collections.ObjectModel;
using System.Windows;
namespace WpfTestTreeView
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private ObservableCollection<Department> _departments;
public MainWindow()
{
InitializeComponent();
// This is a long winded way but it shows the mechanics of the collections
_departments = new ObservableCollection<Department>();
//Create New Depaertment and Student objects
Department d1 = new Department("A");
Student s1 = new Student("John","1");
// Add the Student to the Department Student List
d1.Students.Add(s1);
Student s2 = new Student("Rocky", "4");
// Add the Student to the Department Student List
d1.Students.Add(s2);
Student s3 = new Student("Donald", "6");
// Add the Student to the Department Student List
d1.Students.Add(s3);
// Add the Department to The Departments List
Departments.Add(d1);
Department d2 = new Department("B");
Student s4 = new Student("Tony", "2");
d2.Students.Add(s4);
Departments.Add(d2);
Department d3 = new Department("C");
Student s5 = new Student("Jai", "3");
d3.Students.Add(s5);
Student s6 = new Student("Mickey", "5");
d3.Students.Add(s6);
Departments.Add(d3);
// set itemsource on the treeview
tvDepts.DataContext = Departments;
tvDepts.ItemsSource = Departments;
}
public ObservableCollection<Department> Departments
{
get { return _departments; }
set { _departments = value; }
}
}
// Department Class Holds a Collection of Students
public class Department
{
private ObservableCollection<Student> _students;
public Department(string name)
{
_students = new ObservableCollection<Student>();
Name = name;
}
public string Name { get; set; }
/// <summary>
/// Collection Of Student in the Department
/// </summary>
public ObservableCollection<Student> Students
{
get { return _students; }
set { _students = value; }
}
}
// Student Class
public class Student
{
public Student(string name, string code)
{
StudentName = name;
Code = code;
}
public string StudentName { get; set; }
public string Code { get; set; }
}
}
使用System.Collections.ObjectModel;
使用System.Windows;
命名空间WpfTestTreeView
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
私人收集部门;
公共主窗口()
{
初始化组件();
//这是一个冗长的方式,但它显示了收集的机制
_部门=新的可观察集合();
//创建新的Depaertment和Student对象
部门d1=新部门(“A”);
学生s1=新生(“约翰”,“1”);
//将该学生添加到系学生列表
d1.学生。加上(s1);
学生s2=新生(“洛奇”,“4”);
//将该学生添加到系学生列表
d1.学生。添加(s2);
学生s3=新生(“唐纳德”,“6”);
//将该学生添加到系学生列表
d1.学生。加上(s3);
//将部门添加到“部门”列表中
增加(d1);
部门d2=新部门(“B”);
学生s4=新生(“托尼”,“2”);
d2.学生。加上(s4);
增加(d2);
部门d3=新部门(“C”);
学生s5=新生(“Jai”,“3”);
d3.学生。添加(s5);
学生s6=新生(“米奇”,“5”);
d3.学生.增补(中六);
增加(d3);
//在树视图上设置itemsource
tvDepts.DataContext=部门;
tvDepts.ItemsSource=部门;
}
公共收集部门
{
获取{return\u departments;}
设置{u departments=value;}
}
}
//系班有一群学生
公共课系
{
私立大学学生;
公共部门(字符串名称)
{
_学生=新的可观察集合();
名称=名称;
}
公共字符串名称{get;set;}
///
///系内学生的收集
///
公选学生
{
获取{return\u students;}
设置{u students=value;}
}
}
//学生班
公立班学生
{
公立学生(字符串名称、字符串代码)
{
StudentName=姓名;
代码=代码;
}
公共字符串StudentName{get;set;}
公共字符串代码{get;set;}
}
}
希望这有助于您理解:)
using System.Collections.ObjectModel;
using System.Windows;
namespace WpfTestTreeView
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private ObservableCollection<Department> _departments;
public MainWindow()
{
InitializeComponent();
// This is a long winded way but it shows the mechanics of the collections
_departments = new ObservableCollection<Department>();
//Create New Depaertment and Student objects
Department d1 = new Department("A");
Student s1 = new Student("John","1");
// Add the Student to the Department Student List
d1.Students.Add(s1);
Student s2 = new Student("Rocky", "4");
// Add the Student to the Department Student List
d1.Students.Add(s2);
Student s3 = new Student("Donald", "6");
// Add the Student to the Department Student List
d1.Students.Add(s3);
// Add the Department to The Departments List
Departments.Add(d1);
Department d2 = new Department("B");
Student s4 = new Student("Tony", "2");
d2.Students.Add(s4);
Departments.Add(d2);
Department d3 = new Department("C");
Student s5 = new Student("Jai", "3");
d3.Students.Add(s5);
Student s6 = new Student("Mickey", "5");
d3.Students.Add(s6);
Departments.Add(d3);
// set itemsource on the treeview
tvDepts.DataContext = Departments;
tvDepts.ItemsSource = Departments;
}
public ObservableCollection<Department> Departments
{
get { return _departments; }
set { _departments = value; }
}
}
// Department Class Holds a Collection of Students
public class Department
{
private ObservableCollection<Student> _students;
public Department(string name)
{
_students = new ObservableCollection<Student>();
Name = name;
}
public string Name { get; set; }
/// <summary>
/// Collection Of Student in the Department
/// </summary>
public ObservableCollection<Student> Students
{
get { return _students; }
set { _students = value; }
}
}
// Student Class
public class Student
{
public Student(string name, string code)
{
StudentName = name;
Code = code;
}
public string StudentName { get; set; }
public string Code { get; set; }
}
}