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
相关产品推荐
相关产品推荐

