它非常簡單。
DataContext引用項目的相同屬性。它沒有得到擴展,也沒有動態。 DataContext適用於當前位於父級內的子級屬性。
但是ItemsSource是動態的。它隨着源代碼而延伸。這是一個例子。
這是一個示例xaml。
<UserControl x:Class="SilverlightApplication"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.Resources>
<DataTemplate x:Key="template2">
<StackPanel Orientation="Horizontal">
<Image x:Name="img1" Source="{Binding Image}"></Image>
<TextBlock x:Name="data2" Text="{Binding Data}"></TextBlock>
</StackPanel>
</DataTemplate>
</Grid.Resources>
<StackPanel>
<StackPanel x:Name="DataContextStack" Orientation="Vertical">
<TextBlock x:Name="data1" Text="{Binding Text1}"></TextBlock>
<TextBlock x:Name="data2" Text="{Binding Text2}"></TextBlock>
</StackPanel>
<ListBox x:Name="lst2" ItemTemplate="{StaticResource template2}"></ListBox>
</StackPanel>
</Grid>
這裏是後面的代碼。
namespace SilverlightApplication
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
loadLists();
}
private void loadLists()
{
ObservableCollection<Temp2> tColl = new ObservableCollection<Temp2>();
Temp1 t1 = new Temp1();
t1.Text1 = "DataContext1";
t1.Text2 = "DataContext2";
tColl.Add(new Temp2() { Image = "", Data = "Item1" });
tColl.Add(new Temp2() { Image = "", Data = "Item2" });
DataContextStack.DataContext = t1;
lst2.ItemsSource = tColl;
}
}
public class Temp1
{
public string Text1 { get; set; }
public string Text2 { get; set; }
}
public class Temp2
{
public string Image { get; set; }
public string Data { get; set; }
}
}
正如你所看到的,在DataContext適用於哪些存在的StackPanel中和是指一個單獨的屬性,該屬性是文本的的TextBlocks。
而ItemsSource指的是Textblock的Image和Text屬性的來源,並且列表中的項目可以與ObservableCollection一起擴展。
或者讓它變得更簡單。
DataContext - 根據設計設置值。 ItemsSource - 根據邏輯設置值。
希望這會有所幫助。
將此標記爲答案,如果這回答了您的問題。
對於SelectedValue SelectedItem,如果我們有綁定,那麼它將綁定到組合框的datacontext屬性(而不是組合框的itemssource中每個項目的屬性)。所以它是播放器的屬性,現在是組合框的數據上下文 對於SelectedValuePath,DisplayMemberPath:我們不使用標記語法將值分配給它們,因此它基本上沒有綁定。這就是爲什麼我們仍然可以在itemssource中分配項目屬性的名稱(而不是datacontext的屬性)。我對嗎? – Tai 2010-08-19 22:08:23