c# - 如何在 WPF 中将字段绑定到 DataGrid?
问题描述
我正在用 WPF 编程 UI 一个月。所以我是这个世界的新人。这是我第一次在这里发帖,我的母语不是英语。因此,如果我的写作有任何错误,请见谅。
我对 WPF 有疑问,我无法找到解决方案。我正在尝试在 WPF 中制作完全可定制的 DataGrid,我不希望 DataGrid 自动创建列或行。我有一个ObservableCollection
名为Sinif_Tutucu
(在我的母语中表示Class_Holder),它持有类。这些类具有相同的字段和属性,但它们的值不同。我正在根据这些类中的字段和属性一一创建列。在此之后,我手动将列添加到 DataGrid。
然后我ItemsSource
像这样添加行。
DataGrid_1.ItemsSource = Sinif_Tutucu;
这仅填充 DataGrid 中的属性,并且由字段组成的列保持为空。我已经搜索过这个,我想没有办法将字段绑定到 DataGrid。里面的类Sinif_Tutucu
有数千个字段。所以我不能将字段转换为属性,也不想从头开始编写整个数据网格结构。因为 WPF DataGrid 结构提供了许多我目前正在使用的有用功能。我能够获取字段名称及其值或属性名称和值。我只需要自己创建每一行(如列)并用我的手用 C# 一个一个地填充它们的单元格。或者以某种方式我需要以编程方式将这些字段转换为属性。有什么办法可以做到这一点?
解决方案
假设您要在数据网格中显示的类看起来像这样
public class Data
{
public int Value;
public string Name;
public DateTime Date = DateTime.Now;
}
因为您无法将字段绑定到DataGridColumns
,所以您必须动态创建列和记录。这是一个简短的片段,您可以使用它来执行此操作。此方法在 a 中创建新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;
}
推荐阅读
- python - 使用 Treeview 分离两个函数
- python - 将列表中的元素相乘
- mongodb - 从 Mongoose Schema 中检索自定义对象
- python - if 条件的顺序如何在 while 循环中工作?
- oracle - 如何使用从 sqlplus 控制台生成的触发器到 oracle forms bulider?
- r - SQL 和 T-SQL 的 R 服务,运行多个存储过程时的内存问题
- python - 如何在生成的板上移动我的角色?
- asp.net - razor 命名处理程序和 BindProperty
- r - K 表示聚类 - ID 代替 R 中的索引
- javascript - 使用 Javascript 将标签分别附加到每个数组值