当ItemsSource为空或null时,MVVM WPF用Label替换ListBox

时间:2011-04-20 18:46:12

标签: wpf collections mvvm visibility

我在WPF(.NET 3.5)中有这一行:

<ListBox ItemsSource="{Binding Locks}" Style="{DynamicResource FancyListBox}" />

我希望的行为是当属性Locks(一个ObservableCollection)为null或包含0个元素时,显示一个类似下面的标签而不是ListBox。

<Label Content="No locks are present" Style="{DynamicResource FancyLabel}" />

到目前为止,我能想到的唯一解决方案是使用valueconverter(即CollectionToVisibilityShowIfNull,CollectionToVisibilityShowIfNotNull等转换器)将Locks属性绑定到可见性,但我不确定这是否是最佳解决方案。

... Visibility={Binding Locks, Converter={StaticResource CollectiontoVisibilityShowIfNull}} ..

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

这是我通常做的事情:

<Grid>
    <ListBox Name="lstLocks" ItemsSource="{Binding Locks}" Style="{DynamicResource FancyListBox}" />
    <Label Name="lblNoLocks" Content="No locks are present" Style="{DynamicResource FancyLabel}" Visibility="Collapsed" />
</Grid>

...
<DataTrigger Binding="{Binding Locks.Count}" Value="0">
    <Setter TargetName="lstLocks" Property="Visibility" Value="Collapsed" />
    <Setter TargetName="lblNoLocks" Property="Visibility" Value="Visible" />
</DataTrigger>