Je rencontre des problèmes lorsque j'essaie de lier une propriété d'un UserControl dans un ItemTemplate avec un mode FindAncestor.FindAncestor ne fonctionne pas pour UserControl dans ListView.ItemTemplate
J'ai le code suivant:
<Window x:Class="TestUserControlBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:TestUserControlBinding"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<!--<Label Content="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" />-->
<local:MyUserControl Content="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" />
</DataTemplate>
</ListView.ItemTemplate>
<ListView.Items>
<system:String>First</system:String>
<system:String>Second</system:String>
<system:String>Third</system:String>
</ListView.Items>
</ListView>
</Grid>
</Window>
La ligne d'étiquettes commenté fonctionne bien (il affiche vrai si elle est sélectionnée dans le ListView, et False autrement).
Le problème est avec le MyUserControl qui ne affiche rien et VS dit:
System.Windows.Data Error: 40 : BindingExpression path error: 'Content' property not found on 'object' ''String' (HashCode=-1920739956)'. BindingExpression:Path=Content; DataItem='String' (HashCode=-1920739956); target element is 'Label' (Name=''); target property is 'Content' (type 'Object')
MyUserControl contient simplement une étiquette liée à la propriété Contenu:
<Grid>
<Label Content="{Binding Content}" />
</Grid>
Est-ce que quelqu'un sait pourquoi le UserControl se comporte différemment que le contrôle Label? (ou au moins peut m'aider à voir ce que je manque évidemment?)
Merci. Mon cas était beaucoup plus compliqué que ce que j'ai décrit ici, mais votre réponse m'a conduit à la bonne solution. –