WPF listbox пустой набор данных
Мне было интересно, как люди обрабатывают элемент управления ListBox, который не имеет элементов? например Я хочу связать список результатов поиска, но если результатов не найдено, я бы хотел отобразить "Результаты не найдены".
То, как я в настоящее время занимаюсь этим, заключается в том, что я скрываю список, если результат набора count = 0 и показывает метку с сообщением "Нет результатов". В идеале мне бы хотелось что-то вроде решения ASP.NET для datagrid EmptyTemplate.
Приветствия
Ответы
Ответ 1
У меня был некоторый успех с этим кодом:
<Style TargetType="ListBox" x:Key="ListStyle" BasedOn="{StaticResource {x:Type ListBox}}">
<Style.Triggers>
<DataTrigger
Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Items.Count}"
Value="0"
>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock>No items to display</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
Ответ 2
Основываясь на принятом ответе @Matt Hamilton, для справки я создал вариант, который не требует привязки, поскольку он использует свойство HasItems
для ListBox
для запуска пустого шаблона:
<ListBox.Style>
<Style x:Key="EmptyListStyle"
TargetType="ListBox"
BasedOn="{StaticResource {x:Type ListBox}}">
<Style.Triggers>
<!-- Use ListBox.HasItems instead of Binding -->
<Trigger Property="HasItems" Value="False">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock>No items to display</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.Style>
Это позволяет использовать стиль во всем мире, не зная имя свойства, к которому привязан список. Я нашел это полезным при привязке к CollectionViewSource
, определенному в XAML.
Я не знаю никаких недостатков этого метода, комментарии приветствуются, если вы найдете их.