我有一个WPF DataGrid
我要在其中显示一条消息'没有数据'当其中没有记录时。所以我在pchajer提供的答案中完成了here所解释的内容,但是当datagrid显示没有数据时,消息未显示。我认为我遇到了AncestorType
的问题,我想我没有正确指定,但我不知道如何解决这个问题。我根本不明白AncestorType
的工作原理......
在我的代码下面:
<Window x:Class="My.Apps.WPF.Test.wMain"
xmlns:local="clr-namespace:My.Apps.WPF.Test">
<dg:DataGrid.Style>
<Style TargetType="dg:DataGrid">
<Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.IsRecordExists,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:wMain}}}" Value="false">
<Setter Property="RowHeight" Value="0"></Setter>
<Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</dg:DataGrid.Style>
<!-- Missatge quan no hi ha documents pel procés seleccionat -->
<dg:DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="No hi ha documents disponibles pel procés seleccionat" Width="400"></TextBlock>
</StackPanel>
</DataTemplate>
</dg:DataGrid.RowDetailsTemplate>
</Window>
代码隐藏(XAML.cs):
namespace My.Apps.WPF.Test
{
public partial class wMain : ViewBaseControl
{
}
}
答案 0 :(得分:2)
您可以绑定到DataGrid
的{{1}}属性并更改模板:
HasItems
如果<DataGrid.Style>
<Style TargetType="DataGrid">
<Style.Triggers>
<DataTrigger Binding="{Binding HasItems, RelativeSource={RelativeSource Self}}" Value="false">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGrid">
<TextBlock Text="No data..." />
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
中没有行,则永远不会显示任何行详细信息,以便该方法无效。
修改:如果您想要显示列标题,即使没有行,也应该在模板中包含DataGrid
:
DataGridColumnHeadersPresenter