在XAML中,有没有一种方法可以确定ListBox是否具有数据?
如果没有数据,我想将其IsVisible属性设置为false。
ListBox包含一个HasItems属性,您可以将其绑定到。因此,您只需要执行以下操作:
<BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
...
<ListBox
Visibility="{Binding HasItems,
RelativeSource={RelativeSource Self},
Converter=BooleanToVisibility}" />
或者将其作为触发器,这样你就不需要转换器:
<ListBox>
<ListBox.Style>
<Style TargetType="{x:Type ListBox}">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger
Binding="{Binding HasItems, RelativeSource={RelativeSource Self}}"
Value="False">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Style>
</ListBox>
我尚未测试绑定,因此可能会有一些错字,但您应该能够理解主要思想。
在触发器中完成此操作,您将不需要使用ValueConverter:
<ListBox>
<ListBox.Style>
<Style TargetType="{x:Type ListBox}">
<Style.Triggers>
<DataTrigger
Binding="Items.Count, {Binding RelativeSource={RelativeSource Self}}"
Value="0">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Style>
</ListBox>
这会使ListBox默认显示,但如果Items.Count为0,则隐藏ListBox。
<ListBox.Style>
<Style TargetType="ListBox">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<Trigger Property="HasItems" Value="False">
<Setter Property="Visibility" Value="Hidden"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.Style>
你可以使用ValueConverter和普通绑定来使其工作。
将可见性设置为:
Visibility = "{Binding myListbox.Items.Count, Converter={StaticResource VisibilityConverter}}"
然后设置您的转换器,根据计数的值返回Visibility.Collapsed等。
ItemCollection.Count
不是一个依赖属性,当集合中的项目数量发生变化时,绑定不会得到更新。 - Martin Liversage