Подтвердить что ты не робот

Что означает DataContext = "{Binding}"?

Я пытаюсь выяснить, где элементы в 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"
  />

поэтому рассмотрим его:

  • Атрибут ContentTemplate описывает, как элементы будут проигнорированы.
  • WorkspacesTemplate устанавливает атрибут ItemsSource в {Binding}, что означает его свойство DataContext (DataContext HeaderedContentControl)
  • Итак, я смотрю на DataContext HeaderedContentControl, но он также описывается как "{Binding}"...

Что это значит?

4b9b3361

Ответ 1

Не видя больше своего кода, трудно быть уверенным, но 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", которое (в большинстве случаев) является избыточным!

Ответ 2

{Binding} - это что-то вроде bind 'this' или текущего контекста данных - назначено или унаследовано от родителей. Для лучшего понимания эквивалент для {Binding} равен {Binding .} или {Binding Path=.}