У меня есть базовый 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: 40: Ошибка пути BindingExpression: свойство PropertyInParentContext не найдено в 'объекте' '' ChildControl '(Name=' ChildName ')'. BindingExpression: Path = PropertyInParentContext; DataItem = 'ChildControl' (Name= 'ChildName'); целевым элементом является "ChildControl" (Name= "ChildName" ); target - свойство 'PropertyOnChild' (тип 'whatever')
Почему "PropertyInParentContext" ищет в дочернем элементе управления, а не в родительском DataContext
?
Если я удалю
DataContext="{Binding RelativeSource={RelativeSource Self}}
из дочернего элемента управления, тогда все работает так, как я ожидал.
Я пропустил что-то очевидное здесь?