FindAncestor モードで ItemTemplate の UserControl のプロパティをバインドしようとすると、いくつかの問題が発生します。
次のコードがあります。
<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>
コメント化されたラベル行は正常に機能します (ListView で選択されている場合は True が表示され、それ以外の場合は False が表示されます)。
問題は、何も表示しない MyUserControl にあり、VS は次のように言います。
System.Windows.Data エラー: 40: BindingExpression パス エラー: 'Content' プロパティが 'object' ''String' (HashCode=-1920739956)' に見つかりません。BindingExpression: パス = コンテンツ; DataItem='String' (HashCode=-1920739956); ターゲット要素は「ラベル」(Name=''); ターゲット プロパティは「コンテンツ」(タイプ「オブジェクト」)
MyUserControl には、Content プロパティにバインドされた Label が含まれているだけです。
<Grid>
<Label Content="{Binding Content}" />
</Grid>
UserControl が Label コントロールとは異なる動作をする理由を知っている人はいますか? (または、少なくとも、明らかに欠けているものを見つけるのに役立ちますか?)