界面就一个treeview
<Window x:Class="treeDemo01.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen">
<Grid>
<TreeView x:Name="tr_1">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding }">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
发现这个ItemsSource=”{Binding }”写不写都一样,不知道为什么。
然后建立一个Book.cs类
public class Book {
public string Name { get; set; }
}
然后我先主窗口这样写,先不利用Book 类
List<string> Book;
public MainWindow()
{
InitializeComponent();
Book = new List<string>();
Book.Add("你好");
tr_1.ItemsSource = Book;
}
很奇怪,出来的是一个空目录,至少能出来一个目录,说明treeview是接收list类型的,也就是集合吧。因为 List<string>里面没有Name属性,所以TextBlock 是出来了,但是没有值。在继续改
List<Book> Book;
public MainWindow()
{
InitializeComponent();
Book = new List<Book>();
Book bk = new Book();
bk.Name = "你好";
Book.Add(bk);
tr_1.ItemsSource = Book;
}
我这里就建立10数据吧,一会测试下子层是怎么样联系的。
List<Book> Book;
public MainWindow()
{
InitializeComponent();
Book = new List<Book>();
for (int i = 0; i < 10;i++ )
{
Book.Add(new Book() { Name ="第" + i + "个父节点"});
}
tr_1.ItemsSource = Book;
}
当然这样是远远不够的,因为子层还没有。所以要对Book这个类进行改造了。在Book类下在嵌套一个List。有点搞脑子啊。
public class Book {
public string Name { get; set; }
public List<Book> Children { get; set; }
public Book(){
Children=new List<Book>();
}
}
然后主界面进行修改
public MainWindow()
{
InitializeComponent();
Book = new List<Book>();
for (int i = 0; i < 10;i++ )
{
Book bk = new Book();
bk.Name = "第" + i + "个父节点";
bk.Children.Add(new Book { Name="我是"+i});
Book.Add(bk);
}
tr_1.ItemsSource = Book;
}
}
然后发现显示的还是和上面的一样。这个时候就想到了
bind绑定
<HierarchicalDataTemplate ItemsSource="{Binding }">
还是空着的,那么填什么呢Book还是Children。
<HierarchicalDataTemplate ItemsSource="{Binding Children }">
如要显示子节点就绑定最底层的对象,因为Name是从最底层的属性开始找,我是这么理解的。