2017-04-06 4 views
-1

je le code XAML suivant pour WPFPourquoi pas mon style obtenir mis sur l'enfant d'un ContentControl dans WPF

<ContentControl> 
     <ContentControl.Resources> 
      <Style TargetType="selections:EntitySelector"> 
       <Setter 
        Property="EntitySelectorManager" 
        Value="{Binding SelectorManager, Mode=OneWay }"/> 
      </Style> 
     </ContentControl.Resources> 
     <ContentControl.Content> 
      <Binding Path="Editor" /> 
     </ContentControl.Content> 
    </ContentControl> 

Puis dans le code derrière en réponse à un événement que j'ai mis l'éditeur propety

this.Editor = element 

où l'élément est une commande qui contient une ou plusieurs EntitySelector objets. Cependant, une fois que le contrôle est instancié dans l'arbre visuel, je peux voir que la liaison n'a pas fonctionné.

D'abord, je vérifie la SelectorManager propriété sur le DataContext au niveau du ContentControl. Cela semble pour

enter image description here

Maintenant, je vais dans le ContentControl et voir si des contrôles EntitySelector ont leurs EntitySelectorManager propriétés définies.

enter image description here

Vous pouvez voir qu'il ya une expression de liaison, mais le résultat est nul. Pourquoi est-ce?

Répondre

0

J'ai une solution mais je ne l'aime pas vraiment. L'utilisation d'une ressource dynamique qui est initialisé à partir codebehind

public WeinCamWindow(WeinCamWorkPiece camViewModel) 
{ 
    ViewModel = camViewModel; 
    InitializeComponent(); 
    DataContext = ViewModel; 
    this.Resources["EntitySelectionManager"] = ViewModel.SelectorManager; 

} 

et dans le style d'utiliser une ressource dynamique

<Style TargetType="selections:EntitySelector"> 
    <!-- 'EntitySelectionManager' is set in code behind. --> 
    <Setter Property="EntitySelectorManager" 
      Value="{DynamicResource EntitySelectionManager}" /> 
</Style> 

Les ressources dyamic propage les où tous les autres trucs que je ne fonctionnait pas essayé.