2010-05-05 31 views
3

這個對話框是沒有意義的,我如何設置ItemsSource?

http://img576.imageshack.us/img576/4223/50709706.gif

而且我有麻煩就可以找到很好的教程。大多數示例都不夠詳細,或者通過代碼來完成,但是我希望儘可能地利用IDE。

ItemsSourceDataContext有什麼區別?

我想將它綁定到初學者列表。我不需要SQL或數據庫或任何奇特的東西。我會在哪裏申報我的名單?在MainWindow.xaml.cs?我如何讓它出現在對話框中?

+3

順便說一句,我建議花時間適應XAML。視覺設計師仍然有很多難以或不可能完成的事情。 XAML不僅僅是說文本框和按鈕應該放在哪裏的方式,它是描述對象及其關係的豐富而強大的語言。 – 2010-05-06 01:08:08

回答

5

將「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本身上)。

+0

我真的沒有得到的是當我選擇'DataContext'作爲源代碼,然後下拉到'Source'時,沒有選項。我只看到「無」。具體來說,在我的C#代碼中,我應該把'List items'這樣的東西放在ItemsSource對話框中。 – mpen 2010-05-06 05:00:50

+0

問題是,如果你告訴它你想使用DataContext,那麼你就是說你不想設置Source。兩者都沒有意義。使用DataContext和路徑。 – 2010-05-06 05:27:23

+0

在一個課堂上,你有一個物品和物品清單。它可以是任何類,這是使MVVM工作的想法。然後您將該類設置爲DataContext。現在您可以將該屬性設置爲路徑。 – 2010-05-06 06:37:17

1

您很少需要使用控件以外的控件的數據上下文。設置DataContextDataContext = this;)的最常見用例在UserControl的代碼隱藏之內,以使UserControl中的所有控件都綁定到控件的屬性。

當您使用ListBox時,設置ItemsSource就足夠了,除非您正在做一些有趣的事情。

1

這是一個很好的演練:http://windowsclient.net/learn/video.aspx?v=315275

具體而言,您需要設置DataContext先告訴它在哪裏查找ItemsSource。最簡單的方法是通過XAML在Window上設置它:

<Window.DataContext> 
    <controllers:DownloadManager /> 
</Window.DataContext> 
相關問題