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 下載 ,效果圖如下:

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM