WPF listbox пустая таблица данных - PullRequest
48 голосов
/ 31 марта 2009

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

Способ, которым я сейчас занимаюсь, заключается в том, что я скрываю список, если счетчик результатов равен 0, и показываю метку с сообщением «Результаты не найдены». В идеале я хотел бы что-то вроде решения ASP.NET datagrid EmptyTemplate.

Приветствия

Ответы [ 2 ]

101 голосов
/ 31 марта 2009

У меня был некоторый успех с этим кодом:

<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>
14 голосов
/ 22 февраля 2016

На основании принятого ответа @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.

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

...