У меня есть базовый 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}}
от дочернего элемента управления, тогда все работает так, как я ожидал.
Я упустил здесь что-то очевидное?