.NET 可以绑定 ExpandoObject 吗?

作者:vkvi 来源:ITPOW(原创) 日期:2023-9-12

.NET 的 ListView、GridView 等控件可以通过绑定数据源的方式,显示数据。

那可以绑定 ExpandoObject 吗?

因为 ExpandoObject 可以自由添加属性,也就是说我们在编译阶段,并不知道有哪些属性,只有在运行的时候才知道,这样可以实现更灵活的高级功能。

// 不行。
dynamic d = new ExpandoObject();
d.Id = 1; // 转换成 IDictionary 操作也不行。

// 行。
var d= new { Id  = 1}; // 匿名类。

很遗憾。

ListView、GridView 不认 List<ExpandoObject>、ExpandoObject。

错误信息:DataBinding:“System.Dynamic.ExpandoObject”不包含名为“Xxx”的属性。

这是因为 ExpandoObject 的核心是 IDictionary,它与匿名类是两回事。

那我可以用 Dictionary、KeyValuePair 吗?

很遗憾 ListView、GridView 是根据对象的属性名来匹配的,并不会根据 dictionary.Name 去匹配,再去读 dictionary.Value。

KeyValuePair 也是一样的,不可用。

那可以用 dynamic 吗?

准确的说,这句话有问题,dynamic 是一种声明方式,就像 var 一样。

用 dynamic 去声明数据源对象,是没有问题的。

相关文章