“TreeView”是怎样绑定资源的???看不懂啊
“TreeView”是怎样绑定资源的???看不懂啊。
XAML:
<UserControl.Resources>
<my1:RadTreeViewSampleData x:Key="DataSource"/>
问题一:“RadTreeViewSampleData”是一个“.cs 类”,定义在资源里面是什么意思???是不是这样定义,就可以不用再“Binding”类了,直接绑定资源就好了,是吧???
<DataTemplate x:Key="Team">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
问题二:“DataTemplate”是“TreeView”的“Item”的数据模板对吧???它为什么只作用于最后一级子节点(第三级)呢???
<telerik:HierarchicalDataTemplate x:Key="Division" ItemTemplate="{StaticResource Team}"
ItemsSource="{Binding Teams}">
<TextBlock Text="{Binding Name}" />
</telerik:HierarchicalDataTemplate>
问题三:“HierarchicalDataTemplate” 的作用是什么呢??? 不用“子节点”逐级递归绑定,只要使用“Hierarchical”这一层子节点就绑定了,Why???
问题四:“StaticResource”是什么意思???“Team”是一个“.cs 类”,为什么可以作为资源???
<telerik:HierarchicalDataTemplate x:Key="League" ItemTemplate="{StaticResource Division}"
ItemsSource="{Binding Divisions}">
<TextBlock Text="{Binding Name}" />
</telerik:HierarchicalDataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<telerik:RadTreeView IsOptionElementsEnabled="True" ItemsOptionListType="CheckList"
ItemsSource="{Binding Source={StaticResource DataSource}, Path=LeaguesDataSource}"
ItemTemplate="{StaticResource League}" IsLineEnabled="True" />
问题五:“Binding Source={StaticResource DataSource}, Path=LeaguesDataSource”这一句什么意思??? “Source”表示什么? “Path”表示什么? “DataSource”表示的是“RadTreeViewSampleData 类”, “LeaguesDataSource”是“RadTreeViewSampleData 类”的一个属性。
</Grid>
问题六:这种数据绑定方式,没有使用“递归算法”,也没有使用“DataContext”。它的核心思想是什么呢???
.CS后台代码:
public class RadTreeViewSampleData
{
public RadTreeViewSampleData()
{
this.InitializeLeaguesDataSource();
}
public ObservableCollection<League> LeaguesDataSource
{
get;
set;
}
private void InitializeLeaguesDataSource()
{
this.LeaguesDataSource = new ObservableCollection<League>();
League l;
Division d;
this.LeaguesDataSource.Add(l = new League("XX大学"));
l.Divisions.Add((d = new Division("X1校区")));
d.Teams.Add(new Team("X1楼"));
d.Teams.Add(new Team("综合楼"));
d.Teams.Add(new Team("图书馆"));
d.Teams.Add(new Team("逸夫楼"));
d.Teams.Add(new Team("南楼"));
l.Divisions.Add((d = new Division("X2校区")));
d.Teams.Add(new Team("行政中心楼"));
d.Teams.Add(new Team("能源工程楼"));
d.Teams.Add(new Team("X2图书馆"));
d.Teams.Add(new Team("教学A楼"));
d.Teams.Add(new Team("教学B楼"));
l.Divisions.Add((d = new Division("X3校区")));
d.Teams.Add(new Team("X3南大楼"));
d.Teams.Add(new Team("X3北大楼"));
d.Teams.Add(new Team("X3东大楼"));
d.Teams.Add(new Team("X3综合楼"));
}
}
public class League
{
public League(string name)
{
this.Name = name;
this.Divisions = new ObservableCollection<Division>();
}
public string Name
{
get;
set;
}
public ObservableCollection<Division> Divisions
{
get;
set;
}
}
public class Division
{
public Division(string name)
{
this.Name = name;
this.Teams = new ObservableCollection<Team>();
}
public string Name
{
get;
set;
}
public ObservableCollection<Team> Teams
{
get;
set;
}
}
public class Team
{
public Team(string name)
{
this.Name = name;
}
public string Name
{
get;
set;
}
}
谢谢了,自己对“XAML”中的“模板和资源”理解的不是很透彻。。。谢谢了。。。
[解决办法]
http://www.cnblogs.com/08shiyan/archive/2010/09/21/1832739.html
[解决办法]
问题太多了,我回答一下前面2个吧,
其他的问题下楼继续.....
问题一:“RadTreeViewSampleData”是一个“.cs 类”,定义在资源里面是什么意思???是不是这样定义,就可以不用再“Binding”类了,直接绑定资源就好了,是吧???
======================
定义在资源里面就可以当一般的资源使用了,
你下面也用到了:
ItemsSource="{Binding Source={StaticResource DataSource}, Path=LeaguesDataSource}"
它和Binding类没有关系,就是一资源,资源怎么用,这个就怎么用
比较常用就是静态资源:
StaticResource DataSource
动态资源用的很少
<DataTemplate x:Key="Team">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
问题二:“DataTemplate”是“TreeView”的“Item”的数据模板对吧???它为什么只作用于最后一级子节点(第三级)呢???
是数据模板,但不是“TreeView”的,
也是类似资源,只不过它的Key叫"Team"而已,
只作用于最后一级子节点,
是因为只有只有最后一级子节点应用了它,
如下:
<telerik:HierarchicalDataTemplate x:Key="Division" ItemTemplate="{StaticResource Team}"
ItemsSource="{Binding Teams}">
这个Division又是其它模板的资源,层层嵌套而已
要多看看资源和数据绑定
[解决办法]
你看看这个吧。。http://www.qdv5.com/thread-1482-1-1.html