2012-02-22 91 views
0

我有这样一类被绑定到DataGrid为的ItemSource:Silverlight DataGrid绑定 - 如何将子字典项目绑定为父类属性?

public class Item 
{ 
    public int Id { get; set; } 
    public string Status { get; set; } 
    public Dictionary<string, string> DynamicProperties { get; set; } 
} 

我要绑定List<Item>到一个Silverlight datagird和显示列,因为这

ID |状态| DynamicProperties [0] | DynamicProperties [1] | ......

我该如何执行此操作?

+0

此外,字典是动态的,直到运行时才知道字典的项目数。 – Xin 2012-02-22 09:58:21

+0

它是silverlgiht 4/mvvm光 – Xin 2012-02-22 10:03:07

+0

发现这解决了我的问题 - http://msmvps.com/blogs/deborahk/archive/2011/01/23/populating-a-datagrid-with-dynamic-columns-in- a-silverlight-application-using-mvvm.aspx – Xin 2012-02-22 10:29:45

回答

2

支持Silverlight 4及更高版本bindings with string indexers。您简单绑定与路径如下:

{Binding Path=DynamicProperties['propertyIndex']} 

对于版本更加早期的Silverlight,解决的办法是要复杂得多,as described on my blog

如果你想直接创建列,只需通过代码隐藏来完成。上面引用的博文介绍了如何动态创建DataGrid。

+0

谢谢。由于字典是动态的,因此字典的项目计数在运行时才是未知的。我想在后面的代码绑定,但不知道我应该实现这个事件处理程序。 – Xin 2012-02-22 09:57:37

+0

@Xin更新了我的答案 - 请参阅引用的博客文章,它有一个带动态列的DataGrid示例。 – ColinE 2012-02-22 10:03:55