原文 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