将布尔属性绑定到View的Visibility属性时,我遇到了一个奇怪的问题。
我有一个'main'视图,其中包含一堆其他视图以及各种其他UIElements,包括Buttons,TextBoxes,Grids,StackPanels和一些telerik控件。一些控件的可见性绑定到我的ViewModel上的布尔属性,这样当属性为正时会显示它们,而当它们为负时它们会被折叠。
<Border Visibility="{Binding IsSectionShown,
Converter={StaticResource BoolToVisibilityConverter}}" >
这对我来说非常合适。显而易见我在IsSectionShown
setter中触发了通知事件,并且相应地调整了控件的可见性。
现在我有一个需要调整其可见性的视图。显而易见的实施是
<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>
有关为何发生这种情况的任何想法?解决方法很好,但我想在我的理解中找出差距。
答案 0 :(得分:2)
要使这两个工作正常,IsPositive
属性必须存在Activity
内,而Activity
来自数据上下文中的一级。但那可能不是你想要的。相反,您可以使用这样的内容,以便可见性来自与应用于视图本身的数据上下文不同的数据上下文:
<vw:ActivityView DataContext="{Binding Activity}"
Visibility="{Binding IsPositive, ElementName=ParentElement,
Converter={StaticResource BoolToVisibilityConverter}}" />
其中ParentElement
是包含vw:ActivityView
的父元素。