2012-12-20 53 views
18

我試圖找出HeaderedContentControl中的項目來自哪個項目不是我的。下面的代碼:DataContext =「{Binding}」是什麼意思?

 <HeaderedContentControl 
      Content="{Binding Path=Workspaces}" 
      ContentTemplate="{StaticResource WorkspacesTemplate}" 
      Header="Workspaces" 
      Style="{StaticResource MainHCCStyle}" 
      DataContext="{Binding}" // <--- this 
     /> 

<DataTemplate x:Key="WorkspacesTemplate"> 
<TabControl 
    IsSynchronizedWithCurrentItem="True" 
    ItemsSource="{Binding}" 
    ItemTemplate="{StaticResource ClosableTabItemTemplate}" 
    Margin="4" 
    /> 

所以讓我們來看看它:

  1. 的ContentTemplate屬性描述的項目是如何desplayed。
  2. WorkspacesTemplate設置的ItemsSource的屬性{結合}這意味着它綁定到其DataContext屬性
  3. 所以我看HeaderedContentControl的DataContext的(HeaderedContentControl的DataContext的),但它被描述爲「{結合}」,以及...

這是什麼意思?

回答

24

沒有看到更多的代碼很難確定,但DataContext="{Binding}"往往是不必要的,因爲當前綁定上下文中的任何對象都會自動將其DataContext屬性設置爲等效於{Binding}

記住:

  • Property="{Binding}"指 「設置this.Property到的this.DataContext的評價值」
  • Property="{Binding Path=SubProperty}"裝置 「設置this.Property到的this.DataContext.SubProperty的評價值」

這意味着DataContext="{Binding}"的意思是「設置this.DataContext至評估值this.DataContext「,其(在大多數情況下)是多餘的!

+3

我對「大多數情況下」很感興趣。何時不重複? – Grhm

+1

在它自己的我*漂亮*確定它總是多餘的,但有一些有效的用例,如果你包括轉換器,更新觸發器等來改變綁定的行爲 –

+1

最常見的用法是重置控件上的DataContext它們已從父級繼承了一個被重寫的DataContext,返回原始值。 –

3

{Binding}類似於綁定「this」或當前數據上下文 - 從父母分配或繼承。爲了更好地理解,{Binding}的等價物是{Binding .}{Binding Path=.}