2010-11-20 18 views
1

Si j'ai un modèle de données comme suit,WPF: Source relative à DataTemplate

<DataTemplate DataType="{x:Type vm:EditorTabViewModel}"> 
    <me:MarkdownEditor 
     TextContent="{Binding 
          Path=Content, 
          RelativeSource={RelativeSource AncestorType={x:Type vm:EditorTabViewModel}}}" ... /> 
</DataTemplate> 

Je me demande pourquoi la source relative ne peut pas trouver le EditorTabViewModel? Il se réfère simplement au modèle de données?

MISE À JOUR 1

Les travaux ci-dessous tho

<me:MarkdownEditor TextContent="{Binding Path=Content.Content, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> 

Binding Path=Content.Content 
        ^Refers to EditorTabViewModel.Content 
      ^refers to EditorTabViewModel 

Y at-il une marge plus ituitive? lol, je pensais que RelativeSource={RelativeSource Mode=TemplatedParent}}" fait déjà référence à EditorTabViewModel au premier

Répondre

1

Étant donné que le DataTemplate est pour les objets de type EditorTabViewModel, son DataContext sera déjà un EditorTabViewModel. Donc, vous n'avez pas besoin de définir une source du tout:

TextContent="{Binding Content}" ... /> 
+0

Hmm, mais si mon 'MarkdownEditor' est un UserControl qui a' DataContext = this' je dois le faire, ou bien il va essayer de se lier à une propriété de MarkdownEditor droit? –

+0

A l'intérieur de tout DataTemplate, le DataContext est toujours l'objet de données auquel le modèle est appliqué. Lorsque vous avez un DataType explicitement spécifié comme dans votre exemple DataContext sera une instance de ce type. –