【发布时间】:2009-06-19 17:03:15
【问题描述】:
如何使用 GridView 在 WPF Listview 中显示一个空文本(如在 ASP.net 中),例如“请选择一个人”还是“创建了0个项目”?
【问题讨论】:
如何使用 GridView 在 WPF Listview 中显示一个空文本(如在 ASP.net 中),例如“请选择一个人”还是“创建了0个项目”?
【问题讨论】:
这个 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>
【讨论】:
将其绑定到返回所需文本的 DataSource + 属性? 插入一个虚拟对象,其字符串表示是您想要的文本..
【讨论】: