2015-11-24 2 views
1

J'essaye de créer un ControlTemplate pour un bouton et lier le CommandParameter à une certaine propriété des boutons Content.Accéder à la propriété du contenu dans le style de bouton

Cela ressemble actuellement quelque chose comme ceci:

<Style x:Key="MyStyleKey" TargetType="{x:Type Button}"> 
    <Setter Property="controls:ButtonHelper.CornerRadius" Value="3"/> 
    // stuck here 
    <Setter Property="CommandParameter" Value="{Binding ((SomeDataClass)Content).Id}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      // ... 
     </Setter.Value> 
    </Setter> 
</Style> 

qui est appelé

<Button Command="{Binding SetActive}" Content="{Binding SomeDataObject}" Style="{DynamicResource MyStyleKey}" /> 

Normalement, je mettrais la CommandParameter directement

<Button Command="{Binding SetActive}" CommandParameter="{Binding SomeDataObject.Id}" Content="{Binding SomeDataObject}" Style="{DynamicResource MyStyleKey}" /> 

Ma compréhension de templating est de ne pas répéter toi même. A partir de Id -property fait partie des boutons Content, en le passant au modèle comme CommandParameter fait totalement sens.

+0

On ne sait pas ce que vous demandez, au moins pour moi. –

+0

@FarhanAnam: Comment accéder à la propriété 'Id' des boutons liés' Content'-propriété à transmettre au 'CommandParameter' – KingKerosin

+0

Les deux dernières lignes de votre question m'ont confondu. –

Répondre

1

Vous devez définir relative source:

<Setter Property="CommandParameter" Value="{Binding Content.Id, RelativeSource={RelativeSource Mode=Self}}"/> 
+0

Cela fonctionne. Merci. Toute possibilité d'avoir intellisense activé lors de la saisie 'Content.' ou est ce qui est décrit sur SO [ici] (http://stackoverflow.com/questions/16560550/wpf-binding-casting-in-binding-path) le seul façon? – KingKerosin

+0

@KingKerosin: la solution que vous avez mentionnée ne fonctionnera pas pour cette expression de liaison. – Dennis

+0

en utilisant {{Binding Content. (SomeNameSpace: SomeDataClass.Id), RelativeSource = {RelativeSource Self}} 'fonctionne. En me donnant l'intellisense au moment du design et en corrigeant la liaison à l'exécution. Pourquoi pas? – KingKerosin