Подтвердить что ты не робот

WPF listbox пустой набор данных

Мне было интересно, как люди обрабатывают элемент управления ListBox, который не имеет элементов? например Я хочу связать список результатов поиска, но если результатов не найдено, я бы хотел отобразить "Результаты не найдены".

То, как я в настоящее время занимаюсь этим, заключается в том, что я скрываю список, если результат набора count = 0 и показывает метку с сообщением "Нет результатов". В идеале мне бы хотелось что-то вроде решения ASP.NET для datagrid EmptyTemplate.

Приветствия

4b9b3361

Ответ 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.

Я не знаю никаких недостатков этого метода, комментарии приветствуются, если вы найдете их.