0

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 コントロールとは異なる動作をする理由を知っている人はいますか? (または、少なくとも、明らかに欠けているものを見つけるのに役立ちますか?)

4

1 に答える 1

1

問題は MyUserControl にあると思います<Label Content="{Binding Content}" />。「ListViewItem」は文字列であるため、「文字列」であるデータコンテキストの「コンテンツ」プロパティを見つけようとしています。

このサンプル<Label Content="{Binding}" />では、​​コンテンツをデータ コンテキスト自体にバインドすることを意味する MyUserControl のバインドを置き換えると、機能します。

于 2010-10-06T19:05:23.633 に答える