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

.NET 6 WPF技术问题:DataGrid加载后为空,求错误排查

DataGrid显示为空的原因与解决方法

问题根源

你使用Enumerable.Empty<WidgetA>()创建了一个空的IEnumerable<WidgetA>集合,之后调用的Append方法不会修改原集合本身,而是返回一个包含新增元素的全新集合。但你没有将这些新集合重新赋值给list变量,最终绑定给DataGrid的仍然是最初的空集合,所以界面没有数据显示。

解决办法

有三种可行的修改方式:

方式一:改用List<WidgetA>(推荐,操作更直观)

List的Add方法会直接修改自身集合:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var key1 = new WidgetA { Id = 1, Key = 52 };
    var key2 = new WidgetA { Id = 1, Key = 102 };
    var key3 = new WidgetA { Id = 1, Key = 152 };
    
    var list = new List<WidgetA>();
    list.Add(key1);
    list.Add(key2);
    list.Add(key3);

    DataGrid1.ItemsSource = list;
}

方式二:链式调用Append并直接赋值

利用Linq的链式调用,将所有Append的结果直接赋值给变量:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var key1 = new WidgetA { Id = 1, Key = 52 };
    var key2 = new WidgetA { Id = 1, Key = 102 };
    var key3 = new WidgetA { Id = 1, Key = 152 };
    
    IEnumerable<WidgetA> list = Enumerable.Empty<WidgetA>()
        .Append(key1)
        .Append(key2)
        .Append(key3);

    DataGrid1.ItemsSource = list;
}

方式三:每次Append后重新赋值给变量

每次调用Append后,将返回的新集合重新赋值给list:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var key1 = new WidgetA { Id = 1, Key = 52 };
    var key2 = new WidgetA { Id = 1, Key = 102 };
    var key3 = new WidgetA { Id = 1, Key = 152 };
    
    IEnumerable<WidgetA> list = Enumerable.Empty<WidgetA>();
    list = list.Append(key1);
    list = list.Append(key2);
    list = list.Append(key3);

    DataGrid1.ItemsSource = list;
}

额外提示

如果后续需要动态添加/删除元素并让DataGrid自动刷新显示,建议使用ObservableCollection<WidgetA>替代普通集合,它实现了INotifyCollectionChanged接口,集合变化时会自动通知UI更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:20:27