调整视图的可见性属性无效

6

我在将布尔属性绑定到视图的可见性属性时遇到了一个奇怪的问题。

我有一个“主”视图,其中包含许多其他视图以及各种其他UI元素,包括按钮、文本框、网格、堆栈面板和一些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>

有什么想法是为什么会发生这种情况吗?解决方法可以,但我希望能够确定我理解上的差距。

1个回答

2
为了让这两个都起作用,IsPositive 属性必须同时存在于 Activity 和一个级别更高的数据上下文中,该上下文来自于 Activity。但这可能不是您想要的。相反,您可以使用以下内容,以使可见性来自与视图本身适用的不同数据上下文:
<vw:ActivityView DataContext="{Binding Activity}" 
                 Visibility="{Binding IsPositive, ElementName=ParentElement,
                      Converter={StaticResource BoolToVisibilityConverter}}" />

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接