绑定多功能WPF数据表格

4

你如何绑定一个WPF数据表格,它需要显示来自许多不同数据源的数据,这些数据源具有不同数量的列、不同的列标题和类型?

目前我正在做的是在我的ViewModel中为要在此DataGrid中显示的每个不同记录集创建一个自定义List<DataGridColumn>() datagrid列列表。

我循环遍历此列表以设置DataGrid列:

foreach (DataGridColumn dgc in dgcSample)
{
  dgc.HeaderStyle = hStyle;
  dgMyDataGrid.Columns.Add(dgc);
}

最后,我使用ItemsSource来设置项目的来源:
dgMyDataGrid.ItemsSource = SomeCollection;

这个方法可以工作,但它不具有绑定功能,并且违反了MVVM准则,即ViewModel应该对特定的UI元素保持中立,因为现在它必须处理DataGrid并托管一组DataGridColumn对象... 你有什么想法吗?
3个回答

2
我认为你需要将你的DataGrid与一个数据源绑定,但你的任务只是创建这个数据源。
我会创建一个示例,使用LINQ从不同的实体中创建数据源...
假设你有两个不同的实体:Entity1和Entity2,每个实体都有共同的ID:
class Entity1
{
    public int ID { get; set; }
    public string E1Column { get; set; }
}

class Entity2
{
    public int ID { get; set; }
    public string E2Column { get; set; }
}

您可以使用 LINQ 中的 Join 创建 DataSource,如下所示:

Join


List<Entity1> e1List = new List<Entity1>();
e1List.Add(new Entity1() { ID = 1, E1Column = "E1 a" });
e1List.Add(new Entity1() { ID = 2, E1Column = "E1 b" });

List<Entity2> e2List = new List<Entity2>();
e2List.Add(new Entity2() { ID = 1, E2Column = "E2 a" });
e2List.Add(new Entity2() { ID = 2, E2Column = "E2 b" });

var query = from e1 in e1List
            join e2 in e2List on e1.ID equals e2.ID
            select new { ID = e1.ID, E1Column = e1.E1Column, E2Column = e2.E2Column };

// Bind the DataGrid
dataGrid1.ItemsSource = query.ToList();

祝你好运!


1

在我看来,正确的方法是将所有数据源封装到一个类似于自定义 List<DataGridColumn>() 的单个对象中。将其命名为 MultifunctionalSource

这个新对象将包含列的列表,可能还有添加新源和聚合源的方法。当添加新源时,您可以自动管理列的列表。

MultifunctionalSource 负责提供可绑定的数据源。

模型将向视图提供类型为 MultifunctionalSource 的对象。

在视图中,您应该有一个从 datagrid 派生的新控件,它将了解如何显示类型为 MultifunctionalSource 的对象。这个新控件在第一次使用时可能非常简单,因为它可以根据绑定设置其列。

MultifunctionalSource 应该返回一个认为与显示相关的列列表。它也应该能够返回完整的列列表,以便 UI 可以基于其他条件决定哪些列是相关的;从而保持边界。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接