tengo un básico UserControl
que establece su DataContext
a sí mismo para facilitar la unión:DataContext de ajuste dentro de control de usuario está afectando fijaciones en los padres
<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>
Esto se utiliza en un archivo XAML padres así:
<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>
Por alguna razón, esto da un error de enlace que parece indicar que el DataContext
del control principal se está viendo afectado por el control secundario que establece su propio DataContext
.
System.Windows.Data Error: 40 : BindingExpression path error: 'PropertyInParentContext' property not found on 'object' ''ChildControl' (Name='ChildName')'. BindingExpression:Path=PropertyInParentContext; DataItem='ChildControl' (Name='ChildName'); target element is 'ChildControl' (Name='ChildName'); target property is 'PropertyOnChild' (type 'whatever')
¿Por qué es "PropertyInParentContext" está buscando en el control secundario en lugar de en DataContext
de los padres?
Si quito el
DataContext="{Binding RelativeSource={RelativeSource Self}}
del control de control, entonces las cosas funcionan de cómo iba a esperar.
¿Me falta algo obvio aquí?
Gracias, estaba malinterpretando el alcance de las vinculaciones y su publicación lo explicó bastante bien. Estaba pensando que el XAML de un UserControl es autónomo, como en una plantilla, pero creo que todo es solo parte del documento. – GazTheDestroyer