23

私は、HeaderedContentControlのアイテムが、自分のものではないプロジェクトのどこから来ているのかを調べようとしています。コードは次のとおりです。

        <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属性は、アイテムがどのように表示されるかを記述します。
  2. WorkspacesTemplateは、ItemsSourceの属性を{Binding}に設定します。これは、そのDataContextプロパティ(HeaderedContentControlのDataContext)にバインドされることを意味します。
  3. だから私はHeaderedContentControlのdataContextを見ますが、それは「{Binding}」としても記述されています...

どういう意味ですか?

4

2 に答える 2

26

コードをもっと見ることなく、確実にするのは難しいですがDataContext="{Binding}"、現在のバインディングコンテキスト内のオブジェクトは、自動的にそのDataContextプロパティがと同等に設定されるため、ほとんどの場合不要です{Binding}

覚えて:

  • Property="{Binding}"this.Property「の評価値に設定」をthis.DataContext意味します
  • Property="{Binding Path=SubProperty}"this.Property「の評価値に設定」をthis.DataContext.SubProperty意味します

これは、 「の評価値にDataContext="{Binding}"設定」を意味します。これは(ほとんどの場合)冗長です。this.DataContextthis.DataContext

于 2012-12-20T09:04:16.377 に答える
5

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

于 2015-02-27T14:20:43.123 に答える