c# - 当 WPF DataGrid 为空时显示 “No record found” 消息

标签 c# wpf datagrid wpfdatagrid

我正在尝试在 WPF 数据网格中显示“未找到记录”消息

我在这里尝试了同一问题的解决方案: Show "No record found" message on a WPF DataGrid when it's empty

但到目前为止,我还没有找到一种方法,仅当我的 ObservableCollection 为空时才添加空行。 这是我的数据网格的代码:

    <DataGrid
        DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}"
        ItemsSource="{Binding CameraListObjCode}"
        AutoGenerateColumns="False"
        Height="145"
        HorizontalAlignment="Left"
        Margin="62,105,0,0"
        Name="dataGrid1"
        VerticalAlignment="Top"
        Width="361"
        IsReadOnly="True">

        <DataGrid.Resources>
            <conv:IntIsEqualOrGreaterThan x:Key="intIsEqualOrGreaterThan"/>
            <conv:IntIsLessThan x:Key="intIsLessThan"/>

            <Style TargetType="DataGrid">
                <Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter>
                <Style.Triggers>
                    <!--<DataTrigger Binding="{Binding Path=CameraListObjCode.Count, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Converter={StaticResource intIsEqualOrGreaterThan}, ConverterParameter=1}" Value="True">-->
                    <DataTrigger Binding="{Binding Path=CameraListObjCode.Count, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Converter={StaticResource intIsLessThan}, ConverterParameter=1}" Value="True">
                        <Setter Property="RowHeight" Value="0"></Setter>
                        <Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Resources>

        <DataGrid.Columns>
            <DataGridTextColumn Header="Camera Model:" Binding="{Binding CameraModel}" />
            <DataGridTextColumn Header="Serial Nr:" Binding="{Binding SerialNr}" />
            <DataGridTextColumn Header="IP Address:" Binding="{Binding IPAddress}" />
        </DataGrid.Columns>

        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="No Record Found" Visibility="Visible" />
                </StackPanel>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>

    </DataGrid>

触发器都按预期工作。但该消息未显示。 当我将触发器转换器从“intIsLessThan”更改为“intIsEqualOrGreaterThan”时,将显示消息而不是实际的数据网格条目。

所以我猜只是缺少空的默认行。但如何添加一个空的默认行?

希望有人能帮我解决这个问题。 我已经搜索了两天来找到解决方案......

最佳答案

我在我的项目中使用它:

<Style x:Key="{x:Type ItemsControl}" TargetType="{x:Type ItemsControl}">
    <Setter Property="Background" Value="Transparent"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}" Value="0">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush Stretch="None">
                        <VisualBrush.Visual>
                            <TextBlock Text="No record found" 
                                       FontFamily="{StaticResource FontFamily}"
                                       FontSize="{StaticResource FontSize}"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Items, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush Stretch="None">
                        <VisualBrush.Visual>
                            <TextBlock Text="No record found" 
                                       FontFamily="{StaticResource FontFamily}"
                                       FontSize="{StaticResource FontSize}"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>
<Style x:Key="{x:Type DataGrid}" TargetType="{x:Type DataGrid}" BasedOn="{StaticResource {x:Type ItemsControl}}">
</Style>

关于c# - 当 WPF DataGrid 为空时显示 “No record found” 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219208/

相关文章:

c# - WPF如何处理异常并继续

c# - 从 DataGrid 中删除无效行后,我无法更新行

c# - Wpf Datagrid将选定值与值路径绑定(bind)

c# - 写入只读访问器 c#

WPF 列表框分组

c# - 在 Monitor.Enter 锁中使用复杂对象是否有任何副作用?

wpf - 在 XAML : Stop an Event from Taking Place

wpf - 如何访问数据网格模板列文本框文本 WPF C#

c# - 将 Entity Framework 对象绑定(bind)到 Datagridview C#

c# - C# 中的结构给出警告字段永远不会分配给,并且将始终具有其默认值 0