WPF MVVM将datagrid列动态绑定到集合

时间:2013-04-22 22:40:38

标签: wpf mvvm wpfdatagrid

我有一个请求,我需要使用MVVM设计WPF屏幕。此屏幕有两个DataGrids。

第一个数据网格将绑定到一个集合,数据网格可以在其中添加或删除项目。

现在,棘手的部分是我需要第二个DataGrid从第一个数据网格绑定的集合中的项目自动生成列。

示例:

如果第一个DataGrid有三行:

| Value 1 |
| Value 2 |
| Value 3 |

我需要第二个数据网格来拥有这三列:

| Value 1 | Value 2 | Value 3 |

但是,我正在尝试一种实现此方法的方法,该方法不涉及手动将这些列添加到第二个数据网格,因为我认为这会因为两个原因而杀死“MVVM方式”:< / p>

  1. 我希望我的视图的代码隐藏文件保持“空”(除了在视图的构造函数上自动生成的“InitializeCOmponent()”之外,我不能添加任何代码)

  2. 我不能让我的ViewModel实际上持有对DataGrid的引用,因为我相信这会创建一个从View到ViewModel的强大联系。

  3. 由于这两个原因,有没有人知道这样做的方法只涉及绑定(或其他不破坏这两条规则的解决方案?)

1 个答案:

答案 0 :(得分:0)

  1. DataTable绑定到first DataGrid。
  2. 然后transpose DataTable(Exchange行和列)并将其绑定到second DataGrid。
  3. 在这里,您必须将DataGrid的AutoGeneratedColumns属性设置为true

    请查看此article以转置DataTable。

    Here是将DataTable绑定到DataGrid的简单解决方案。

    如果您已经将Collection绑定到第一个DataGrid,则可以从Collection中定义new DataTable和logically assigned值,然后您也可以将DataTable绑定到DataGrid