FindAncestor не работает для UserControl в ListView.ItemTemplate - PullRequest
0 голосов
/ 05 октября 2010

У меня возникают некоторые проблемы при попытке связать свойство UserControl в ItemTemplate с режимом FindAncestor.

У меня есть следующий код:

<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>

Закомментированная меткаСтрока работает нормально (она показывает True, если она выбрана в ListView, и False в противном случае).

Проблема в MyUserControl, который ничего не отображает, а VS говорит:

Ошибка System.Windows.Data: 40: Ошибка пути BindingExpression: свойство 'Content' не найдено в 'object' '' String '(HashCode = -1920739956)'.BindingExpression: Path = Содержание;DataItem = 'String' (HashCode = -1920739956);целевым элементом является 'Label' (Name = '');Свойство target - «Content» (тип «Object»)

MyUserControl просто содержит метку, связанную со свойством Content:

<Grid>
    <Label Content="{Binding Content}" />
</Grid>

Кто-нибудь знает, почему UserControl ведет себя иначе, чемМетка управления?(или, по крайней мере, может помочь мне увидеть то, что мне явно не хватает?)

1 Ответ

0 голосов
/ 06 октября 2010

Я думаю, что проблема в вашем MyUserControl, где с <Label Content="{Binding Content}" /> он пытается найти свойство 'Content' в его тексте данных, который является 'string', так как 'ListViewItem' является строкой.

Для этого примера, если вы замените привязку в MyUserControl <Label Content="{Binding}" />, что означает, что вы связываете контент с самим текстом данных, будет работать.

...