2010-10-05 2 views
0

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

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

<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, и ложь в противном случае).

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

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 просто содержит ярлык, связанный с контентной собственности:

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

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

ответ

0

Я думаю, что проблема связана с вашим MyUserControl, где с помощью <Label Content="{Binding Content}" /> он пытается найти свойство Content в своем datacontext, которое является «строкой» как ' ListViewItem '- это строка.

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

+0

спасибо. Мое дело было много сложнее, чем я описывал здесь, но ваш ответ привел меня к правильному решению. –