locked
“TreeView”是怎样绑定资源的???看不懂啊 RRS feed

  • 问题

  • “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”中的“模板和资源”理解的不是很透彻。。。谢谢了。。。

         


    Science and technology is my lover.

    2012年5月28日 12:25

答案

  • Hi starrycheng,

    问题一:“RadTreeViewSampleData”是一个“.cs  类”,定义在资源里面是什么意思???是不是这样定义,就可以不用再“Binding”类了,直接绑定资源就好了,是吧???

    定义在资源里面是等于New一个RadTreeViewSampleData的实例没有其他作用.

    类似于是代码 RadTreeViewSampleData DataSource=new RadTreeViewSampleData();

    --------------------------------------------------------------------------------------------------------------

    问题二:“DataTemplate”是“TreeView”的“Item”的数据模板对吧???它为什么只作用于最后一级子节点(第三级)呢???

    问题四:“StaticResource”是什么意思???“Team”是一个“.cs 类”,为什么可以作为资源???

    你会发现问题二提供给了Team,然后问题四引用了Team.

    --------------------------------------------------------------------------------------------------------------

    问题三:“HierarchicalDataTemplate” 的作用是什么呢???  不用“子节点”逐级递归绑定,只要使用“Hierarchical”这一层子节点就绑定了,Why???

           <telerik:HierarchicalDataTemplate x:Key="League" ItemTemplate="{StaticResource Division}"
               ItemsSource="{Binding Divisions}">
                <TextBlock Text="{Binding Name}" />
            </telerik:HierarchicalDataTemplate>

    是对于League的HierarchicalDataTemplate ,即,遇到League必然拥有Divisions,那么,展开League,必然会得到其下所有Divisions

            <telerik:HierarchicalDataTemplate  x:Key="Division" ItemTemplate="{StaticResource Team}"
               ItemsSource="{Binding Teams}">
                <TextBlock Text="{Binding Name}" />
            </telerik:HierarchicalDataTemplate>

    是对于Division的HierarchicalDataTemplate ,即,遇到Division必然拥有Teams,那么,展开Division,必然会得到其下所有Teams

    --------------------------------------------------------------------------------------------------------------

    问题五:“Binding Source={StaticResource DataSource}, Path=LeaguesDataSource”这一句什么意思???     “Source”表示什么?   “Path”表示什么?         “DataSource”表示的是“RadTreeViewSampleData  类”,   “LeaguesDataSource”是“RadTreeViewSampleData  类”的一个属性。

    “Source”表示什么?

    表示这条代码中定义的DataSource :<my1:RadTreeViewSampleData x:Key="DataSource"/>

    “Path”表示什么?

    Path指向DataSource中的数据LeaguesDataSource

    --------------------------------------------------------------------------------------------------------------

    问题六:这种数据绑定方式,没有使用“递归算法”,也没有使用“DataContext”。它的核心思想是什么呢???

    你可以查看我在问题三中的回答.遇到XX,里面必有XX,那么已经实现了递归

    DataContext是上下文,而这里是直接绑定了,不需要使用到上下文.

    • 已标记为答案 Otomii Lu 2012年6月7日 1:56
    2012年5月30日 2:34

全部回复

  • Hi starrycheng,

    问题一:“RadTreeViewSampleData”是一个“.cs  类”,定义在资源里面是什么意思???是不是这样定义,就可以不用再“Binding”类了,直接绑定资源就好了,是吧???

    定义在资源里面是等于New一个RadTreeViewSampleData的实例没有其他作用.

    类似于是代码 RadTreeViewSampleData DataSource=new RadTreeViewSampleData();

    --------------------------------------------------------------------------------------------------------------

    问题二:“DataTemplate”是“TreeView”的“Item”的数据模板对吧???它为什么只作用于最后一级子节点(第三级)呢???

    问题四:“StaticResource”是什么意思???“Team”是一个“.cs 类”,为什么可以作为资源???

    你会发现问题二提供给了Team,然后问题四引用了Team.

    --------------------------------------------------------------------------------------------------------------

    问题三:“HierarchicalDataTemplate” 的作用是什么呢???  不用“子节点”逐级递归绑定,只要使用“Hierarchical”这一层子节点就绑定了,Why???

           <telerik:HierarchicalDataTemplate x:Key="League" ItemTemplate="{StaticResource Division}"
               ItemsSource="{Binding Divisions}">
                <TextBlock Text="{Binding Name}" />
            </telerik:HierarchicalDataTemplate>

    是对于League的HierarchicalDataTemplate ,即,遇到League必然拥有Divisions,那么,展开League,必然会得到其下所有Divisions

            <telerik:HierarchicalDataTemplate  x:Key="Division" ItemTemplate="{StaticResource Team}"
               ItemsSource="{Binding Teams}">
                <TextBlock Text="{Binding Name}" />
            </telerik:HierarchicalDataTemplate>

    是对于Division的HierarchicalDataTemplate ,即,遇到Division必然拥有Teams,那么,展开Division,必然会得到其下所有Teams

    --------------------------------------------------------------------------------------------------------------

    问题五:“Binding Source={StaticResource DataSource}, Path=LeaguesDataSource”这一句什么意思???     “Source”表示什么?   “Path”表示什么?         “DataSource”表示的是“RadTreeViewSampleData  类”,   “LeaguesDataSource”是“RadTreeViewSampleData  类”的一个属性。

    “Source”表示什么?

    表示这条代码中定义的DataSource :<my1:RadTreeViewSampleData x:Key="DataSource"/>

    “Path”表示什么?

    Path指向DataSource中的数据LeaguesDataSource

    --------------------------------------------------------------------------------------------------------------

    问题六:这种数据绑定方式,没有使用“递归算法”,也没有使用“DataContext”。它的核心思想是什么呢???

    你可以查看我在问题三中的回答.遇到XX,里面必有XX,那么已经实现了递归

    DataContext是上下文,而这里是直接绑定了,不需要使用到上下文.

    • 已标记为答案 Otomii Lu 2012年6月7日 1:56
    2012年5月30日 2:34
  • Hi starrycheng,

    问题一:“RadTreeViewSampleData”是一个“.cs  类”,定义在资源里面是什么意思???是不是这样定义,就可以不用再“Binding”类了,直接绑定资源就好了,是吧???

    定义在资源里面是等于New一个RadTreeViewSampleData的实例没有其他作用.

    类似于是代码 RadTreeViewSampleData DataSource=new RadTreeViewSampleData();

    --------------------------------------------------------------------------------------------------------------

    问题二:“DataTemplate”是“TreeView”的“Item”的数据模板对吧???它为什么只作用于最后一级子节点(第三级)呢???

    问题四:“StaticResource”是什么意思???“Team”是一个“.cs 类”,为什么可以作为资源???

    你会发现问题二提供给了Team,然后问题四引用了Team.

    --------------------------------------------------------------------------------------------------------------

    问题三:“HierarchicalDataTemplate” 的作用是什么呢???  不用“子节点”逐级递归绑定,只要使用“Hierarchical”这一层子节点就绑定了,Why???

           <telerik:HierarchicalDataTemplate x:Key="League" ItemTemplate="{StaticResource Division}"
               ItemsSource="{Binding Divisions}">
                <TextBlock Text="{Binding Name}" />
            </telerik:HierarchicalDataTemplate>

    是对于League的HierarchicalDataTemplate ,即,遇到League必然拥有Divisions,那么,展开League,必然会得到其下所有Divisions

            <telerik:HierarchicalDataTemplate  x:Key="Division" ItemTemplate="{StaticResource Team}"
               ItemsSource="{Binding Teams}">
                <TextBlock Text="{Binding Name}" />
            </telerik:HierarchicalDataTemplate>

    是对于Division的HierarchicalDataTemplate ,即,遇到Division必然拥有Teams,那么,展开Division,必然会得到其下所有Teams

    --------------------------------------------------------------------------------------------------------------

    问题五:“Binding Source={StaticResource DataSource}, Path=LeaguesDataSource”这一句什么意思???     “Source”表示什么?   “Path”表示什么?         “DataSource”表示的是“RadTreeViewSampleData  类”,   “LeaguesDataSource”是“RadTreeViewSampleData  类”的一个属性。

    “Source”表示什么?

    表示这条代码中定义的DataSource :<my1:RadTreeViewSampleData x:Key="DataSource"/>

    “Path”表示什么?

    Path指向DataSource中的数据LeaguesDataSource

    --------------------------------------------------------------------------------------------------------------

    问题六:这种数据绑定方式,没有使用“递归算法”,也没有使用“DataContext”。它的核心思想是什么呢???

    你可以查看我在问题三中的回答.遇到XX,里面必有XX,那么已经实现了递归

    DataContext是上下文,而这里是直接绑定了,不需要使用到上下文.

    Thanks  a  lot...谢谢您耐心的解答,但还是有点疑问。

    使用数据模板进行绑定和使用数据上下文进行绑定,二者有什么不同呢???


    Science and technology is my lover.


    2012年6月6日 12:27
  • "使用数据模板进行绑定和使用数据上下文进行绑定,二者有什么不同呢???"

    上下文的意思就是,东西在<></>的范围里,且如果直接使用{Binding} 那么绑定的就直接是上下文设定的内容.

    模板绑定,如果是ItemTemplate的话,就是绑定通过上下文绑定的集合的每一条数据

    2012年6月7日 2:00
  • 如:

    <telerik:HierarchicalDataTemplate  x:Key="Division" ItemTemplate="{StaticResource Team}"
               ItemsSource="{Binding Teams}">
                <TextBlock Text="{Binding Name}" />
            </telerik:HierarchicalDataTemplate>

    ItemsSource="{Binding Teams}"的意思是上下文中有一个名字为Teams的属性,它是一个集合.

    <TextBlock Text="{Binding Name}" />的意思是绑定的就是Teams的每一个Team的Name


    2012年6月7日 2:03