WPF列表框空datatemplate

时间:2009-03-31 03:11:12

标签: .net wpf listbox datatemplate

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

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

干杯

2 个答案:

答案 0 :(得分:101)

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

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

答案 1 :(得分:13)

基于@Matt Hamilton接受的答案,作为参考,我创建了一个不需要绑定的变体,因为它使用HasItems的{​​{1}}属性来触发空模板:

ListBox

这允许全局使用样式,而不必知道列表绑定的属性名称。我发现绑定到XAML中定义的<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> 时很有用。

我不知道这种方法的任何缺点,欢迎评论,如果你找到任何。