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

WPF DataGrid绑定List数据报CS1922错误如何解决

问题背景

在WPF项目中为DataGrid填充业务数据时触发CS1922编译错误,错误信息如下:

CS1922 The type SPSDataBlock cannot be initialized with a collections initializer because it is not System.Collections.IEnumerable

错误原因

CS1922报错的触发逻辑非常明确:

  • 代码中new SPSDatenbautein() { ... }块使用了错误的初始化语法:C#对象初始化器要求大括号内必须是属性名 = 赋值的键值对格式,当前代码直接把_sPSDatenbautein实例的属性值逗号分隔罗列,编译器会将这种无赋值的逗号分隔写法识别为集合初始化器。
  • 集合初始化器仅支持实现了System.Collections.IEnumerable接口、且存在对应Add方法的类型,SPSDatenbautein是普通业务实体类,未实现该接口,因此直接抛出编译错误。
  • 即使忽略编译错误,当前写法也没有给新创建的SPSDatenbautein实例的任何属性赋值,DataGrid绑定后拿不到有效展示数据。
修复方案

修正对象初始化器的写法,为新实例的每个公开属性显式赋值,取值来自已有的_sPSDatenbautein实例对应属性,修复后完整代码如下:

private void DisplaySPS()
{
    this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, new Action(delegate ()
    {
        List<SPSDatenbautein> items = new List<SPSDatenbautein>();

        items.Add(new SPSDatenbautein()
        {
            All_processes = _sPSDatenbautein.All_processes,
            Magnetisierung = _sPSDatenbautein.Magnetisierung,
            Hypot = _sPSDatenbautein.Hypot,
            Continuity = _sPSDatenbautein.Continuity,
            Gesamt_Isolationswiderstand = _sPSDatenbautein.Gesamt_Isolationswiderstand,
            Gesamt_Leckstrom = _sPSDatenbautein.Gesamt_Leckstrom,
            Benutzer_Anmeldung = _sPSDatenbautein.Benutzer_Anmeldung,
            Material_number = _sPSDatenbautein.Material_number,
            Order_number = _sPSDatenbautein.Order_number,
            Serial_number = _sPSDatenbautein.Serial_number,
            Continuity_Measurment_Result = _sPSDatenbautein.Continuity_Measurment_Result,
            Magnetisierung_Measurment_Result = _sPSDatenbautein.Magnetisierung_Measurment_Result,
            Strom_Leistung = _sPSDatenbautein.Strom_Leistung,
            Isolationswiderstand = _sPSDatenbautein.Isolationswiderstand,
            Leckstrom = _sPSDatenbautein.Leckstrom
        });

        SPSDataGrid.ItemsSource = items;
    }));
}
额外注意事项
  • 确认SPSDatenbautein类的对应属性为公开属性(带public修饰符,包含get访问器),否则DataGrid无法读取属性值完成渲染。
  • 如果需要频繁更新列表数据,建议将数据源替换为ObservableCollection<SPSDatenbautein>,避免每次重新赋值ItemsSource,数据变更时DataGrid会自动刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:54:18