2010-06-14 5 views
1

J'ai un ContextMenu et un ColumnHeaderStyle définis dans la section Window.Resource que je l'utilise pour un DataGrid ColumnHeader. Mon code est quelque chose comme ceci:WPF ContextMenu lier une propriété à une autre propriété du même contrôle

<ContextMenu x:Key="cm_columnHeaderMenu"/> 

<Style x:Key="DefaultColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"> 
    <Setter Property="ContextMenu" Value="{StaticResource cm_columnHeaderMenu}" /> 
</Style> 

<DataGrid Grid.Column="2" Grid.Row="1" x:Name="dgridFiles" IsReadOnly="True" 
ColumnHeaderStyle="{StaticResource DefaultColumnHeaderStyle}"> 

Je veux savoir si je peux (et si la réponse est vrai, alors comment je peux je le faire) lier la propriété de visibilité ContextMenu même contrôle ContextMenu Items.Count> 0 propriété. Initialement basé sur d'autres sélections de contrôle treeView faites il ne devrait y avoir aucun élément dans le menu contextuel, mais je souhaite ajouter des éléments dinamically dans ContextMenu basé sur la sélection dans treeView. Cette partie est terminée, le contexte a ces éléments. Sur certaines sélections, il y a des no-items, mais toujours dans la grille, il apparaît un ContextMenu vide. Donc je crois que le plus simple serait de lier la propriété Visibility à Items.Count du même contrôle. Désolé si mon anglais n'est pas assez bon, je vais essayer d'expliquer mieux si je n'ai pas fait clair la 1ère fois.

Répondre

0

Essayez un convertisseur pour convertir la valeur du nombre d'éléments en un booléen. Donc, vous finirez avec quelque chose comme

<ContextMenu Visibility={Binding RelativeSource={RelativeSource Self}, 
Converter={StaticResource ItemsToVisibilityConverter}, Path=Items.Count}} /> 

Si cela ne fonctionne pas, essayez ceci avec des déclencheurs de données (vous avez encore besoin d'un convertisseur de toute façon, et cela montre un convertisseur au travail):

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a8ad8c14-95aa-4ed4-b806-d0ae874a8d26/

+0

le 'Items.Count' doit être converti en' énumération Visibility' par la façon dont – Amsakanna

+0

Ah, cool, merci :) – Lunivore

2

vous souhaitez lier via RelativeSource, en particulier le mode Self.
Je pense en lisant this ou this vous serez en mesure d'atteindre votre objectif.

Ensuite, vous aurez besoin d'un convertisseur de liaison pour convertir les valeurs entières au type correspondant et aux valeurs de la propriété Visibility. Vous trouverez un court tutoriel here.

Cordialement

1

Avec ceci, on peut se lier à la propriété dans le même contrôle

Visibility="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}" 

Vous devez également utiliser un convertisseur pour obtenir ce que vous voulez.

Just in case you need this

Questions connexes