J'ai un UserControl
de base qui définit sa DataContext
à lui-même pour faciliter la liaison:Réglage DataContext dans UserControl affecte les liaisons dans les parents
<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>
Il est utilisé dans un fichier XAML parent comme ceci:
<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>
Pour une raison quelconque, cela génère une erreur de liaison qui semble indiquer que le DataContext
du contrôle parent est affecté par le paramètre de contrôle enfant 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')
Pourquoi « PropertyInParentContext » être à la recherche dans le contrôle des enfants plutôt que dans DataContext
du parent?
Si je supprime le
DataContext="{Binding RelativeSource={RelativeSource Self}}
du contrôle des enfants, alors les choses fonctionnent comment j'attendre.
Est-ce que je manque quelque chose d'évident ici?
Merci, je me méprenais sur la portée des fixations et votre post l'expliquait plutôt bien. Je pensais que le XAML d'un UserControl est autonome, comme dans un modèle, mais je suppose que tout cela fait partie du document. – GazTheDestroyer