54

我想知道人们如何处理没有项目的 ListBox 控件?例如,我想绑定一个搜索结果列表,但如果没有找到结果,我想显示“未找到结果”。

我目前解决此问题的方法是,如果结果集计数 = 0,我将隐藏列表框并显示带有“未找到结果”消息的标签。理想情况下,我想要 ASP .NET datagrid EmptyTemplate 解决方案。

干杯

4

2 回答 2

109

我在这段代码上取得了一些成功:

<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>
于 2009-03-31T03:16:40.460 回答
22

基于@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 中定义的对象时很有用。

我不知道这种方法的任何缺点,如果您发现任何缺点,欢迎发表评论。

于 2016-02-22T11:49:26.877 回答