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

Mal*_*are 1 collections wpf visibility mvvm

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

<ListBox ItemsSource="{Binding Locks}" Style="{DynamicResource FancyListBox}" />
Run Code Online (Sandbox Code Playgroud)

我的期望的行为是,当属性锁(一个ObservableCollection)是null或包含0个元素,显示像一个下面,而不是列表框的标签.

<Label Content="No locks are present" Style="{DynamicResource FancyLabel}" />
Run Code Online (Sandbox Code Playgroud)

我能想到的迄今唯一的解决办法是将锁定属性使用valueconverter可见性(即转换器像CollectionToVisibilityShowIfNull,CollectionToVisibilityShowIfNotNull)绑定,但我不知道这是最好的解决方案.

... Visibility={Binding Locks, Converter={StaticResource CollectiontoVisibilityShowIfNull}} ..
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Tho*_*que 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>
Run Code Online (Sandbox Code Playgroud)