调整视图不可用的可见性属性

问题描述:

我将一个布尔属性绑定到视图的可见性属性时出现了一个奇怪的问题。调整视图不可用的可见性属性

我有一个'主'视图,其中包含一堆其他视图以及各种其他UIElements,包括按钮,文本框,网格,StackPanels和一些telerik控件。一些控件的可见性绑定到我的ViewModel上的布尔属性,这样当属性为正时,它们将显示,当为负时,它们将折叠。

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

这对我来说是完美的。很明显,我已经触发了IsSectionShown设置器中的通知事件,并且控件的可见性也会相应地调整。

现在我有一个视图需要调整其可见性。明显的实现是

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

不行!我的解决办法是换一个StackPanel内我的观点和调整StackPanel中的知名度 - 这工作得很好:

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

任何想法,为什么发生这种情况?解决方法很好,但我想确认我理解的差距。

对于这两个工作,属性将不得不存在于Activity内和Activity来自的数据上下文中的一个级别。但这可能不是你想要的。相反,你可以使能见度来自不同的数据上下文比适用于视图本身的一个使用是这样的:

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

其中ParentElement是包含vw:ActivityView父元素。

+0

当然!谢谢 – 2011-02-04 04:13:30