Внутри шаблона элемента привязка инициализируется в контексте текущего элемента в AllItems
.
Обновление
За пределами ItemTemplate
ваших привязокотносятся к DataContext страницы. **
При нахождении внутри ItemTemplate
привязки ограничиваются областью действия элемента, специально оцениваемого в то время.
Итак, если мыпредположим следующее (основываясь на коде в вашем вопросе):
<ItemsControl x:Name="myList" ItemsSource="{Binding AllItems}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock x:Name="tb1"
Text="{Binding DataContext.Test, ElementName=myList}"/>
<TextBlock x:Name="tb2" Text="{Binding KeyName}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
tb1
не может напрямую получить доступ к объекту DataContext.
tb2
не может получить доступ KeyName
- при условии, что любой объект AllItems
- это IEnumerable, содержащий свойство с этим именем.
Насколько я понимаю, внутри шаблона элемента элемент, прошедший из перечисления, контролирует источник привязки, и это не может быть переопределено (путем установки ElementName или иным образом).
Если вам нужно значение из Test
в каждом объекте в вашем перечислении, вам нужно добавить его как свойство объекта в перечислении.
Я уверен, что кто-то более знающий, чем я, мог бы объяснить, почему это так, или дать лучшее объяснение, но в этом суть.
** Предполагая, что нет других вложений ItemsControls (или эквивалентных)