MVVM WPF заменяет ListBox на Label, когда ItemsSource пуст или равен нулю - PullRequest
1 голос
/ 20 апреля 2011

У меня есть эта строка в WPF (.NET 3.5):

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

Мое желаемое поведение заключается в том, что когда свойство Locks (ObservableCollection) равно нулю или содержит 0 элементов, вместо ListBox отображается метка, подобная приведенной ниже.

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

Единственное решение, которое я могу придумать, - это связать свойство Locks с видимостью с помощью преобразователя значений (то есть таких преобразователей, как CollectionToVisibilityShowIfNull, CollectionToVisibilityShowIfNotNull), но я не уверен, что это лучшее решение.

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

Спасибо за любую помощь!

1 Ответ

5 голосов
/ 20 апреля 2011

Вот что я обычно делаю:

<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>
...