2011-02-04 5 views
5

J'ai un problème étrange avec la liaison d'une propriété booléenne à une propriété Visibilité de la vue.Ajuster la propriété Visibilité d'une vue ne fonctionne pas

J'ai une vue 'principale' qui contient un tas d'autres vues ainsi que divers autres UIElements, y compris les boutons, les zones de texte, les grilles, StackPanels et certains contrôles telerik. Certains des contrôles ont leur visibilité liée aux propriétés booléennes sur mon ViewModel, de sorte que lorsque la propriété est positive, ils sont affichés, et lorsqu'ils sont négatifs, ils sont réduits.

<Border Visibility="{Binding IsSectionShown, 
       Converter={StaticResource BoolToVisibilityConverter}}" > 

Cela fonctionne parfaitement pour moi. Il est évident que j'ai déclenché l'événement de notification dans le setter IsSectionShown, et la visibilité du contrôle est ajustée en conséquence.

Maintenant, j'ai une vue dont la visibilité doit être ajustée. L'implémentation évidente est

<vw:ActivityView DataContext="{Binding Activity}" 
       Visibility="{Binding IsPositive, 
         Converter={StaticResource BoolToVisibilityConverter}}" /> 

Ne fonctionne pas! Mon travail est là pour envelopper mon point de vue dans un StackPanel et ajuster la visibilité du StackPanel - et cela fonctionne très bien:

<StackPanel Visibility="{Binding IsPositive, 
       Converter={StaticResource BoolToVisibilityConverter}}"> 
    <vw:ActivityView DataContext="{Binding Activity}" /> 
</StackPanel> 

Toutes les idées pour lesquelles cela se passe? La solution est correcte, mais je voudrais identifier l'écart dans ma compréhension.

Répondre

2

Pour que ces deux méthodes fonctionnent, la propriété IsPositive doit exister à l'intérieur de Activity et de niveau supérieur dans le contexte de données Activity. Mais ce n'est probablement pas ce que vous vouliez. Au lieu de cela, vous pouvez utiliser quelque chose comme cela pour que la visibilité provient d'un contexte de données différent de celui qui applique à la vue elle-même:

<vw:ActivityView DataContext="{Binding Activity}" 
       Visibility="{Binding IsPositive, ElementName=ParentElement, 
         Converter={StaticResource BoolToVisibilityConverter}}" /> 

ParentElement est l'élément parent qui contient vw:ActivityView.

+0

Bien sûr! Merci –

Questions connexes