WPF Liaison de contrôle interne avec les parents de contexte de données

J'ai fait un contrôle utilisateur

<UserControl x:Class="MyApp.MyControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d"  x:Name="uc">
<Grid Width="Auto" Height="Auto">
    <TextBlock Text="{Binding Path=DataContext.TextContent, ElementName=uc}"/>
    <TextBlock Text="{Binding Path=DataContext.TextContent2, ElementName=uc}"/>
</Grid>

Je veux les sous-contrôles dans les régimes de contrôle(uc) vont se lier aux propriétés de l'uc.DataContext. J'ai utilisé le contrôle défini comme suit:

<Window x:Class="Tms.TMSClient.Views.MainWindow" Name="window"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:control="clr-namespace:MyApp"
    xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary">      

    <control:MyControl DataContext="{Binding Path=MyControlVM}"/>

Le DataContext qui est attribué à la fenêtre a cette structure: WindowVM.MyControlVM.TextContent.

Le code donné ne fonctionne pas parce que la zone de texte du DataContext est lié à WindowVM à la place. Je pense que le problème est peut-être parce que l'intérieure de la zone de texte est lié avant la définition de contrôle (uc) est donc la délimitée DataContext pour uc ne prend pas effet.

Ce que je veux, c'est: le contrôle personnalisé (MyControl) sera lié à son correspondant viewmodel (MyControlVM), et les éléments intérieurs de MyControl sera lié aux propriétés de MyControlVM.

Avez-vous des solutions pour ce problème?

Avez-vous, par hasard, faire quelque chose comme DataContext = this dans MyApp.MyControl? Aussi, si vous ne changez pas DataContext dans le contrôle {Binding TextContent} devrait être suffisant
Vous définissez MyControlVM.DataContext à MyControlVM, et depuis il est hérité par le biais de visual arbre, tout à l'intérieur, par défaut et jusqu'à la modification de il aura qui DataContext. Dans votre cas TextBlock, Grid et UserControl aura le même DataContext définie à partir de l'extérieur de MyControlVM

OriginalL'auteur Thomas Lee | 2014-10-24