You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF DataGrid的RowDetailsTemplate行详情模板中嵌套DataGrid

问题原因

WrapPanel 内的控件可以直接继承当前行的 DataContext 绑定单个属性,而 DataGrid 是列表类控件,必须指定 ItemsSource 集合数据源才会生成行渲染内容,你当前的嵌套 DataGrid 没有配置数据源,所以无法显示内容。

解决方案

你需要给嵌套的 DataGrid 绑定一个仅包含当前行数据的单元素集合,有两种常用实现方式:

方案1:修改实体类(改动最小)

给你的 TableData 类新增一个返回自身单元素集合的属性:

public class TableData : INotifyPropertyChanged
{
    // 原有属性保持不变
    // 新增以下属性即可
    public List<TableData> SelfList => new List<TableData> { this };
}

然后修改嵌套DataGrid的XAML,指定ItemsSource绑定该属性:

<DataGrid x:Name="RowDetailsDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding SelfList}">
    <!-- 原有列定义保持不变 -->
</DataGrid>

方案2:使用值转换器(无需修改实体类)

如果不想改动实体类结构,可以定义一个值转换器把单个对象转为单元素集合:

  1. 新增转换器类:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Windows.Data;

public class ObjectToSingleListConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null ? new List<object>() : new List<object> { value };
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
  1. 在窗口资源中注册转换器:
<Window.Resources>
    <local:ObjectToSingleListConverter x:Key="ObjectToSingleListConverter"/>
</Window.Resources>
  1. 修改嵌套DataGrid的绑定配置:
<DataGrid x:Name="RowDetailsDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Converter={StaticResource ObjectToSingleListConverter}}">
    <!-- 原有列定义保持不变 -->
</DataGrid>

两种方案都可以实现单行DataGrid的展示需求,选择任意一种即可。

内容的提问来源于stack exchange,提问作者afham Mk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:57:04