2010-10-05 6 views
0

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

Répondre

0

Je pense que le problème est avec votre MyUserControl, où avec <Label Content="{Binding Content}" /> il essaie de trouver la propriété 'Content' à son datacontext qui est 'chaîne' comme ' ListViewItem 'est une chaîne.

Pour cet exemple, si vous remplacez la liaison dans MyUserControl <Label Content="{Binding}" />, ce qui signifie que vous liez le contenu au datacontext lui-même, fonctionnera.

+0

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