如何在WPF中将字段绑定到DataGrid?

问题描述

我正在使用WPF编程UI了一个月。所以我是这个世界的新手。这是我第一次在这里发帖,我的母语不是英语。因此,如果我的写作中有任何错误,对此表示抱歉。

我对WPF有问题,但无法找到解决方案。我试图在WPF中制作完全可自定义的DataGrid,但我不希望DataGrid自动创建列或行。 我有一个名为ObservableCollection的{​​{1}}(在我的母语中是 Class_Holder ),它保存着类。这些类具有相同的字段和属性,但是它们的值不同。我正在根据这些类中的“字段和属性”一一创建列。之后,我将列手动添加到DataGrid。

然后我像这样添加带有Sinif_Tutucu的行。

ItemsSource

这仅填充DataGrid中的属性,并且由字段组成的列保持为空。我已经搜索过了,我想没有办法将Fields绑定到DataGrid。 DataGrid_1.ItemsSource = Sinif_Tutucu; 中的类具有数千个字段。因此,我无法将字段转换为属性,也不想从头开始编写整个datagrid结构。因为WPF DataGrid结构提供了许多我当前正在使用的有用功能。我可以获取字段名称及其值或属性名称和值。我只需要自己创建每一行(如列),并用C#一只手填充它们的单元格。或以某种方式我需要以编程方式将这些字段转换为属性。有什么办法可以做到这一点?

解决方法

假设您要在数据网格中显示的类如下所示

public class Data
{
    public int Value;
    public string Name;
    public DateTime Date = DateTime.Now;
}

由于不能将字段绑定到DataGridColumns,因此必须动态创建列和记录。这是一个简短的片段,您可以使用它来完成。此方法在dynamic中创建新的List对象,该对象存储与ObservableCollection中相同的数据。该List被设置为您的ItemSource中的新DataGrid。该代码段仅创建DataGridTextColumns。如果要使用其他DataGridColumns,您必须修改此解决方案。

private void loadDataGrid()
{
    List<dynamic> dataObjects = new List<dynamic>();
    dynamic dataObject;
    IDictionary<string,object> dataObjectValues;

    var fields = typeof(Data).GetFields();

    foreach (var item in Sinif_Tutucu)
    {
        dataObject = new System.Dynamic.ExpandoObject();

        foreach (var field in fields)
        {
            dataObjectValues = (IDictionary<string,object>)dataObject;
            dataObjectValues[field.Name] = field.GetValue(item);
        }

        dataObjects.Add(dataObject);
    }

    dataObjectValues = (IDictionary<string,object>)dataObjects[0];

    foreach (var pair in dataObjectValues)
    {
        var binding = new Binding(pair.Key);

        DataGridTextColumn col = new DataGridTextColumn() { Binding = binding,Header = pair.Key }; //You might want to use another DataGridColumn-Type

        dataGrid.Columns.Add(col);
    }

    dataGrid.ItemsSource = dataObjects;
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...