当 WPF DataGrid 没有行时显示消息“无数据”

use*_*552 1 c# wpf wpfdatagrid .net-3.5

我有一个 WPF DataGrid,当其中没有记录时,我想在其中显示一条消息“无数据”。所以我已经完成了 pchajer 提供的答案中解释的内容但是当数据网格显示没有数据时,消息不会显示。我认为我遇到了问题AncestorType,我认为我没有正确指定,但我不知道如何解决这个问题。我完全不明白怎么办AncestorType运作...

\n\n

下面是我的代码:

\n\n
<Window x:Class="My.Apps.WPF.Test.wMain"\n        xmlns:local="clr-namespace:My.Apps.WPF.Test">\n\n<dg:DataGrid.Style>\n    <Style TargetType="dg:DataGrid">\n        <Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter>\n        <Style.Triggers>\n            <DataTrigger Binding="{Binding DataContext.IsRecordExists, \n                                   RelativeSource={RelativeSource Mode=FindAncestor,\n                                                                  AncestorType={x:Type local:wMain}}}" Value="false">\n                <Setter Property="RowHeight" Value="0"></Setter>\n                <Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter>\n            </DataTrigger>\n        </Style.Triggers>\n    </Style>\n</dg:DataGrid.Style>\n\n<!-- Missatge quan no hi ha documents pel proc\xc3\xa9s seleccionat -->\n<dg:DataGrid.RowDetailsTemplate>\n    <DataTemplate>\n        <StackPanel>\n            <TextBlock Text="No hi ha documents disponibles pel proc\xc3\xa9s seleccionat" Width="400"></TextBlock>\n        </StackPanel>\n    </DataTemplate>\n</dg:DataGrid.RowDetailsTemplate>\n\n</Window>\n
Run Code Online (Sandbox Code Playgroud)\n\n

隐藏代码 (XAML.cs):

\n\n
namespace My.Apps.WPF.Test\n{\n    public partial class wMain : ViewBaseControl\n    {\n\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

mm8*_*mm8 9

您可以绑定到DataGridHasItems属性并更改模板:

<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>
Run Code Online (Sandbox Code Playgroud)

如果 中没有行,则永远不会显示任何行详细信息,DataGrid因此该方法不起作用。

编辑:如果您想在没有行的情况下显示列标题,您应该DataGridColumnHeadersPresenter在模板中包含:

<DataTrigger Binding="{Binding HasItems, RelativeSource={RelativeSource Self}}" Value="false">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGrid">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Grid.Column="1" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                    <TextBlock Text="No data..." Grid.Row="1" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)