將「DataContext」視爲綁定中「源」的默認值。
當你創建一個綁定,您可以指定路徑和源,像這樣(我將使用文本框爲例):
<TextBox Text="{Binding Path=Foo,Source={StaticResource Bar}}" />
所以我TextBox.Text屬性綁定到一個Foo財產在名爲Bar的對象上(應用程序中的某個資源)。
但是,如果您有大量需要綁定到Bar屬性的東西,則將Bar設置爲父容器的DataContext會更容易。沒有源代碼的綁定默認情況下會使用DataContext,並且DataContext會從父級流向子控件。所以:
<StackPanel DataContext="{StaticResource Bar}">
<TextBox Text="{Binding Path=Foo}" />
<TextBox Text="{Binding Path=Fizz}" />
<TextBox Text="{Binding Path=Buzz}" />
</StackPanel>
所有文本框仍在結合性質的酒吧,但他們這樣做,而不將其設置爲源明確。
所以讓我們再看看你發佈的對話框。它爲您提供了幾個選項,用於ItemsSource綁定的「源」。當你選擇「DataContext」時,你告訴Visual Studio,ItemsControl不需要知道源代碼 - 它會從父容器的DataContext(甚至可能是Window本身)中選取它。
如果您選擇了其他選項之一(ElementName,RelativeSource或StaticResource),那麼您將顯式地爲該ItemsControl設置綁定的源。
一旦您告訴它它綁定到DataContext,您需要放入對話框的「路徑」部分並告訴它將哪個屬性綁定到控件的項目。最後,標記會是這個樣子(假設它是一個列表框):
<ListBox ItemsSource="{Binding Path=Foos}" />
所以在ListBox中的項目是從一個名爲「FOOS」屬性來了,該屬性是我們設置的對象上在邏輯樹中更高的DataContext中(也許在Window本身上)。
順便說一句,我建議花時間適應XAML。視覺設計師仍然有很多難以或不可能完成的事情。 XAML不僅僅是說文本框和按鈕應該放在哪裏的方式,它是描述對象及其關係的豐富而強大的語言。 – 2010-05-06 01:08:08