2012-12-20 7 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は{バインディング}それは
  3. は、だから私はHeaderedContentControlのDataContextのを見て(DataContextのHeaderedContentControlの)そのDataContextプロパティにバインドされています意味するのItemsSourceの属性を設定しますが、それは同様に...
  4. を「{バインディング}」と記載されています

それはどういう意味ですか?

答えて

24

あなたのコードをもっと見ることなく、特定するのは難しいですが、DataContext="{Binding}"は、現在のバインディングコンテキスト内のどのオブジェクトも自動的に{Binding}と等価に設定されているため、不要です。

は覚えておいてください:

  • Property="{Binding}"
  • Property="{Binding Path=SubProperty}" "this.DataContextの評価値にthis.Propertyを設定する" を意味など

この

  • "this.DataContext.SubPropertyの評価値にthis.Propertyを設定する" という意味DataContext="{Binding}"は、「this.DataContextを評価値this.DataContext "に変換します(ほとんどの場合)!

  • +3

    です。私は「ほとんどの場合」に興味を持っています。いつ冗長ではないのですか? – Grhm

    +1

    それは自分自身です。私はかなり冗長ですが、コンバーターや更新トリガーなどを組み込んでバインディングの動作を変更すると有効なユースケースがあります。 –

    +1

    最も一般的なのは、コントロールのDataContextをリセットすることですその親からオーバーライドされたDataContextを元の値に継承しています。 –

    3

    {Binding}は、バインド 'this'または現在のデータコンテキスト(親から割り当てられているか、継承している)のようなものです。理解を深めるため、{Binding}と同等のものは{Binding .}または{Binding Path=.}

    関連する問題