zoukankan      html  css  js  c++  java
  • Silverlight实用窍门系列:64.Silverlight中的DataContext和ItemsSource

        在Silverlight中我们经常看到数据绑定源由DataContext或者ItemsSource指定,那么他们之间的区别有哪些呢?

        DataContext:从英文字母意思是数据上下文,在Silverlight中某个父级元素设置了DataContext,那么其子元素将可以继承并且使用DataContext中的属性。DataContext绑定的数据源可以是实体集合、实体、属性等。

        ItemsSource:其数据源通常是实体集合(多列数据),无法让其子元素继承使用。

        下面我们以一个实例主要讲解DataContext的用法,其中在父级元素Grid设置了一个DataContext属性绑定实体,该实体内部有一个属性为实体集合,此实体集合用于Grid的子元素ListBox的ItemsSource属性绑定。代码如下:

        首先我们看两个实体,其中一个实体属性为List<>:

        public class ClaModel
        {
            public ClaModel()
            {
                ClaName = "五年级三班";
                ClaInfo = "全校最好的班级,获得多项荣誉";
                StuList = new List<StuModel>()
                {
                    new StuModel(){StuName="刘三", StuAge=15, StuInfo="他很勤奋"},
                    new StuModel(){StuName="李四", StuAge=14, StuInfo="他很懒惰"},
                    new StuModel(){StuName="王五", StuAge=16, StuInfo="他很聪明"}
                };
            }
            public string ClaName { get; set; }
    
            public string ClaInfo { get; set; }
    
            public List<StuModel> StuList { get; set; }
        }
    
        public class StuModel
        {
            public string StuName { get; set; }
    
            public int StuAge { get; set; }
    
            public string StuInfo { get; set; }
    
        }

        其次我们来看Xaml代码绑定如下:

    <UserControl x:Class="SLDataContext.MainPage"
        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:SLDataContext"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
        <!--第一种方式-->
        <UserControl.Resources>
            <local:ClaModel x:Key="ClaSource" />
        </UserControl.Resources>
        <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource ClaSource}">
            <TextBlock FontWeight="Bold" Width="60" Height="30" Text="{Binding ClaName}" 
                       VerticalAlignment="Top" HorizontalAlignment="Left"   />
            <TextBlock FontStyle="Italic"  Width="160" Height="30" Text="{Binding ClaInfo}"
                       VerticalAlignment="Top" Margin="70 0 0 0" HorizontalAlignment="Left"  />
            <ListBox Height="239" HorizontalAlignment="Left" Name="lbDetail"
                     VerticalAlignment="Top" Width="343" ItemsSource="{Binding StuList}" 
                     SelectedValuePath="StuAge" DisplayMemberPath="StuName" Margin="27,61,0,0" />
        </Grid>
    </UserControl>

        最后我们看看另外一种后台绑定DataContext的方式。

        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
    
                //第二种方式:也可以用后台代码绑定DataContext
                //this.LayoutRoot.DataContext = new ClaModel();
            }
        }

        如需源码请点击 SLDataContext.zip 下载 ,效果图如下:

         

  • 相关阅读:
    ANDROIDSTUDIO手动安装插件
    xcode 升级到最新的11.1版本打开项目卡顿解决方案
    OC各种数据类型之间的转换方法
    TOJ 3365 ZOJ 3232 It's not Floyd Algorithm / 强连通分量
    在linux下makefile的使用
    Binary Search二分法搜索C++程序
    ORA-01654错误
    合作版状态模式之设计
    基于FPGA的超声波测距(一)
    如何随机获取数据库不连续ID的数据?
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2464952.html
Copyright © 2011-2022 走看看