Проблема в том, что HeaderTemplate
используется для шаблонирования Заголовка, поэтому в HeaderTemplate
ваше DataContext
есть все, что вы связываете или присваиваете свойству Header
вашего GroupBox
.
Думайте о свойстве Header
почти как о DataContext
для заголовка элемента управления. Обычно свойство DataContext
наследует свое значение от своего родителя, но поскольку не у каждого элемента управления есть Header
, заголовок остается пустым, если вы его не установите.
При явной привязке вашего заголовка к текущему DataContext Header="{Binding}"
ваш пример должен работать так, как вы ожидаете. Чтобы проиллюстрировать, как это работает, я создал простой пример ниже, который показывает, как Header
и DataContext
работают независимо друг от друга для предоставления данных либо в тело, либо в заголовок элемента управления.
<GroupBox Header="HEADER TEXT" DataContext="BODY TEXT">
<GroupBox.HeaderTemplate>
<DataTemplate>
<Button Content="{Binding}"
Background="LightGreen" />
</DataTemplate>
</GroupBox.HeaderTemplate>
<CheckBox HorizontalAlignment="Center"
VerticalAlignment="Center" Content="{Binding}" />
</GroupBox>
Это даст GroupBox
, который выглядит следующим образом.
Я думаю, что по умолчанию в databinding
wpf всегда получает данные из свойства DataContext
. Кажется не в datatemplate
Ваше предположение о DataContext
верно, и оно работает в DataTemplate
, как я продемонстрировал, просто в шаблоне заголовка DataContext - это значение из свойства заголовка, а не сам DataContext.