Установка контекста данных в UserControl влияет на привязки в родительском элементе

У меня есть базовый UserControl , который устанавливает свой DataContext себе для упрощения привязки:

<UserControl x:Class="MyControlLib.ChildControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

             DataContext="{Binding RelativeSource={RelativeSource Self}}">

</UserControl>

Это используется в родительском файле XAML следующим образом:

<UserControl x:Class="MyControlLib.ParentControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:ctrl="clr-namespace:MyControlLib">

             <ctrl:ChildControl x:Name="ChildName" 
                                PropertyOnChild="{Binding PropertyInParentContext}"/>             
</UserControl>

По какой-то причине это вызывает ошибку привязки, которая кажется чтобы указать, что на DataContext родительского элемента управления влияет установка дочернего элемента управления его собственного DataContext .

System.Windows.Data Error: 40: Ошибка пути BindingExpression: ' Свойство PropertyInParentContext 'не найдено в' объекте '' 'ChildControl' (Name = 'ChildName') '. BindingExpression: Path = PropertyInParentContext; DataItem =' ChildControl '(Name =' ChildName '); цель элементом является 'ChildControl' (Name = 'ChildName'); целевым свойством является «PropertyOnChild» (введите «все»)

Почему «PropertyInParentContext» ищется в дочернем элементе управления, а не в родительском DataContext ?

Если я удалю

DataContext="{Binding RelativeSource={RelativeSource Self}}

от дочернего элемента управления, тогда все работает так, как я ожидал.

Я упустил здесь что-то очевидное?

13
задан H.B. 16 August 2012 в 22:58
поделиться