【问题标题】:WPF Listview empty textWPF Listview 空文本
【发布时间】:2009-06-19 17:03:15
【问题描述】:

如何使用 GridView 在 WPF Listview 中显示一个空文本(如在 ASP.net 中),例如“请选择一个人”还是“创建了0个项目”?

【问题讨论】:

    标签: c# .net wpf listview


    【解决方案1】:

    这个 XAML 会做类似的事情,它有一个可见的 ListView 显示一个列表和一个隐藏的消息,并在列表为空时使用触发器切换可见性。

    下面的代码适用于任何 IList 或 ICollection,但同样的技术可用于任何数据源,就像往常一样,如果您希望在添加或删除需要使用 ObservableCollection 或类似的项目时更新显示。

    ContentPresenter 的存在是因为您只能在模板或样式中使用触发器,因此我们将控件放在 DataTemplate 中并使用 ContentPresenter 来显示它。

    如果您希望消息出现在 ListView 中,那么您只需移除隐藏 ListView 的 Setter 并为 TextBlock 添加一些边距,以将其定位在 ListVIew 中的第一项应位于的位置。

    <ContentPresenter Content="{Binding}">
        <ContentPresenter.ContentTemplate>
            <DataTemplate>
                <Grid>
                    <ListView Name="list" ItemsSource="{Binding MyList}"/>
                    <TextBlock Name="empty" Text="No items found" Visibility="Collapsed"/>
                </Grid>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding MyList.Count}" Value="0">
                        <Setter TargetName="list" Property="Visibility" Value="Collapsed"/>
                        <Setter TargetName="empty" Property="Visibility" Value="Visible"/>
                    </DataTrigger>                        
                </DataTemplate.Triggers>
            </DataTemplate>
        </ContentPresenter.ContentTemplate>
    </ContentPresenter>
    

    【讨论】:

    • 如果不为空,此示例无法隐藏 TextBlock,因为 Visibility 值不是布尔值。是否可以将其切换为隐藏?
    • @Shurup,我不明白你的评论,当列表不为空时 TextBlock 是隐藏的 - 但你可能想看看 BooleanToVisibilityConverter
    【解决方案2】:

    将其绑定到返回所需文本的 DataSource + 属性? 插入一个虚拟对象,其字符串表示是您想要的文本..

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多