Что означает 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}"...
Что это значит?
Ответы
Ответ 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=.}