原文 http://www.cnblogs.com/luweis/archive/2011/10/21/2220587.html 刚开始遇到的一个问题是这样的,我有一个datagrid,根据不同的条件可以绑定上不同的数据源,或者根据同一个数据源,所要展示的数据字段是不一样的,所以我不能再xaml中把字段给写死了,我第一想到的方法如下: ds_t.fake_proc_T_AP_PMs.Clear(); ds_t.Load(ds_t.Proc_T_AP_PMQuery("2011-07-01", "2011-10-10", cbb_method.SelectedIndex), (lo)=> { var query = from i in lo.Entities select new { i.AP名称, i.MAC地址, i.AP关联用户数, i.CPU利用率, i.内存利用率, i.上行速率, i.下行速率, i.关联用户总数, i.在线用户总数, i.每用户关联次数, i.上行流量, i.下行流量 }; this.PMGrid.ItemsSource = query; 但是代码中还是会报错,我google了一下,发现datagrid无法绑定匿名类,那好吧,我还是构造一个类吧 ds_t.Load(ds_t.Proc_T_AP_PMQuery("2011-07-01", "2011-10-10", cbb_method.SelectedIndex), (lo)=> { var query = from i in lo.Entities select new AP_BASE{ AP名称= i.AP名称, MAC地址= i.MAC地址 ... }; this.PMGrid.ItemsSource = query.ToList<AP_BASE>(); 无奈,还是跟原来的错误是一样的,看到网上有这样的说法:This is Silverlight security restriction - you cannot reflect internal types and anonymous type are internal 这个是在telerik中的论坛找到了http://www.telerik.com/community/forums/silverlight/gridview/gridview-anonymous-types-wont-bind.aspx 因为我本身用到的是RadGridview, 看来这个方法行不通,有时候http://*.com这里找找还是蛮有用的, 在AssemblyInfo.cs中添加 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Windows")] 即可, 不过得用SilverlightToolkit中的DataGrid才行,Telerik的Gridview还是报错。 参考文章: http://www.devcurry.com/2011/04/silverlight-4-databinding-with.html http://blog.lab49.com/archives/2306 http://forums.silverlight.net/p/55332/266134.aspx http://*.com/questions/6193387/populating-datagrid-in-wpf-with-anonymous-type-collection http://blogs.msdn.com/b/mikehillberg/archive/2008/05/05/binding-to-anonymous-types-in-an-xbap-or-silverlight.aspx http://forums.silverlight.net/t/160324.aspx/1 key:gridview anonymous type