2012-12-20 2 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에 HeaderedContentControl의) 자사의 DataContext 속성에 바인딩 된 의미에 ItemsSource의 속성을 설정하지만 그것은뿐만 아니라 ...
  4. 을 "{바인딩}"로 설명되어 있습니다

그 의미는 무엇입니까?

답변

24

코드의 자세한 내용을 보지 않고는 확신하기 어렵지만, 현재 바인딩 컨텍스트의 모든 객체가 자동으로 DataContext 속성 {Binding}의 동등한로 설정해야합니다으로 DataContext="{Binding}"은 자주 필요가 없습니다.

가 기억

  • Property="{Binding}" 의미 "this.DataContext의 평가 값으로 this.Property 설정"
  • Property="{Binding Path=SubProperty}"

이 "this.DataContext.SubProperty의 평가 값으로 this.Property 설정"을 의미 DataContext="{Binding}"은 "세트를 의미합니다. 210에서 평가 된 값 this.DataContext "까지 (대부분의 경우) 중복됩니다!

+3

입니다. "대부분의 경우"에 흥미가 있습니다. 중복되지 않는 경우는 언제입니까? – Grhm

+1

그 자체로 나는 항상 중복 적이라고 확신한다. 그러나 변환기를 포함하고 트리거 등을 사용하여 바인딩 동작을 변경하면 유효한 유스 케이스가있다. –

+1

가장 일반적인 용도는 컨트롤의 DataContext를 재설정하는 것이다 부모로부터 오버라이드 (override) 된 DataContext를 원래의 값으로 상속 한 메소드 –

3

{Binding}은 bind 'this'또는 현재 데이터 컨텍스트와 유사합니다 (부모에게 할당되거나 상속 됨). 더 나은 이해를 위해 {Binding}에 해당하는 것은 {Binding .} 또는 {Binding Path=.}

관련 문제