2011-02-04 12 views
5

Tengo un problema extraño al vincular una propiedad booleana a la propiedad Visibilidad de una vista.Ajuste la propiedad Visibilidad de una vista que no funciona

Tengo una vista 'principal' que contiene un montón de otras vistas, así como varios otros elementos UIE incluidos botones, cuadros de texto, cuadrículas, paneles de pila y algunos controles telerik. Algunos de los controles tienen su visibilidad vinculada a las propiedades booleanas en mi ViewModel, de modo que cuando la propiedad es positiva, se muestran y, cuando son negativas, se contraen.

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

Esto funciona perfectamente para mí. Obvio He activado el evento de notificación en el setter IsSectionShown, y la visibilidad del control se ajusta en consecuencia.

Ahora tengo una vista que necesita tener su visibilidad ajustada. La implementación obvia es

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

¡No funciona! Mi solución es envolver mi vista interior de un StackPanel y ajustar la visibilidad de la StackPanel - y esto funciona bien:

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

alguna idea de por qué está sucediendo esto? La solución está bien, pero me gustaría identificar la brecha en mi comprensión.

Respuesta

2

Para que ambos funcionen, la propiedad IsPositive debería existir dentro de Activity y un nivel arriba en el contexto de datos del que proviene Activity. Pero eso probablemente no sea lo que pretendías. En su lugar, puede utilizar algo como esto por lo que la visibilidad proviene de un contexto de datos diferente a la que se aplica a la vista en sí:

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

donde ParentElement es el elemento principal que contiene vw:ActivityView.

+0

¡Por supuesto! Gracias –

Cuestiones relacionadas