调整视图的Visibility属性不起作用

Kir*_*rst 5 wpf xaml visibility .net-3.5

将布尔属性绑定到View的Visibility属性时,我遇到了一个奇怪的问题.

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

<Border Visibility="{Binding IsSectionShown, 
                Converter={StaticResource BoolToVisibilityConverter}}" >
Run Code Online (Sandbox Code Playgroud)

这对我来说非常合适.显而易见我在IsSectionShownsetter中触发了通知事件,并且相应地调整了控件的Visibility.

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

<vw:ActivityView DataContext="{Binding Activity}" 
                 Visibility="{Binding IsPositive, 
                      Converter={StaticResource BoolToVisibilityConverter}}" />
Run Code Online (Sandbox Code Playgroud)

不行!我的工作是将我的视图包装在StackPanel中并调整StackPanel的可见性 - 这样可以正常工作:

<StackPanel Visibility="{Binding IsPositive, 
                 Converter={StaticResource BoolToVisibilityConverter}}">
    <vw:ActivityView DataContext="{Binding Activity}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

关于为什么会发生这种情况的任何想法?解决方法很好,但我想在我的理解中找出差距.

Ric*_*key 2

为了使这两者都起作用,该IsPositive属性必须存在于来自的Activity数据上下文的内部和上一层。Activity但这可能不是您想要的。相反,您可以使用类似这样的内容,以便可见性来自与应用于视图本身的数据上下文不同的数据上下文:

<vw:ActivityView DataContext="{Binding Activity}" 
                 Visibility="{Binding IsPositive, ElementName=ParentElement,
                      Converter={StaticResource BoolToVisibilityConverter}}" />
Run Code Online (Sandbox Code Playgroud)

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