DataGridView 在分配给包含内部属性的"类型"列表时显示空行



我遇到了一个问题,它有点反对我在访问修饰符上的基本 C# 概念。因此,我构建了一个重现相同场景的示例应用程序。

有一个带有单击按钮的父窗体,在该窗体上生成一个带有 DataGridView 的新窗体。数据源是静态字符串,字符串,属性是内部的,因为我在同一项目中使用所有内容。

令我惊讶的是,由于我有 5 个数据项绑定到该网格,但只是空行,因此制作了 5 行。然后我把这些房产公开了,我能够得到它们。第二次使用正确的数据填充所有行。

父窗体

namespace SampleApp{
public partial class Form1 : Form
{
List<ItemModel> modelList = new List<ItemModel>();
public Form1()
{
InitializeComponent();
}
private void btnClick_Click(object sender, EventArgs e)
{
LoadData();
using (SeperateWindow window = new SeperateWindow(modelList))
{
window.PopulateGrid();
if(window.ShowDialog() == DialogResult.OK)
{
}
}
}
public void LoadData()
{
for(int i= 0; i < 5; i++)
{
ItemModel item = new ItemModel($"Name { i}", i.ToString());
modelList.Add(item);
}
}
}

模型类

namespace SampleApp.Model{
sealed class ItemModel
{
internal string Textvalue { get; set; }
internal string ID { get; set; }
internal ItemModel(string text,string id)
{
Textvalue = text;
ID = id;
}
}

包含网格视图的子窗体

namespace SampleApp.Model{
public partial class SeperateWindow : Form
{
List<ItemModel> _modelList = new List<ItemModel>();
internal SeperateWindow(List<ItemModel> modelList)
{
_modelList = modelList;
InitializeComponent();
}
public void PopulateGrid()
{
dataGridView1.DataSource = _modelList;
}
}

我的问题是,由于所有内容都在同一个项目中,并且模型类和子窗体也位于同一文件夹中,那么为什么我会收到空行?鉴于如果我将它们公开,它工作正常。

来自MSDN

用作绑定的绑定源属性的属性必须是类的公共属性。 出于绑定目的无法访问显式定义的接口属性,也不能访问没有基本实现的受保护属性、私有属性、内部属性或虚拟属性。

另请参阅此问题,其中讨论了数据绑定中public关键字和internal关键字之间的区别。

最新更新