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

C# DataGridView在分配给包含内部属性的类型列表时显示空行,c#,winforms,C#,Winforms,我遇到了一个问题,它与我关于访问修饰符的基本C#概念相矛盾。因此,我构建了一个示例应用程序来再现相同的场景 有一个带有Click按钮的父窗体,在该窗体的事件上会生成一个带有DataGridView的新窗体。数据源是静态字符串,字符串和属性是内部的,因为我在同一个项目中使用所有内容 令我惊讶的是,由于有5个数据项绑定到该网格,所以生成了5行,但都是空行。然后我把这些财产公之于众,并且我能够得到它们。第二次使用正确的数据填充所有行 父表单 namespace SampleApp{ public pa

我遇到了一个问题,它与我关于访问修饰符的基本C#概念相矛盾。因此,我构建了一个示例应用程序来再现相同的场景

有一个带有Click按钮的父窗体,在该窗体的事件上会生成一个带有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);
        }
    }
}
包含GridView的子表单

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;
    }
}
namespace SampleApp.Model{
公共部分类单独窗口:窗体
{
列表_modelList=新列表();
内部单独窗口(列表模型列表)
{
_模型列表=模型列表;
初始化组件();
}
public void PopulateGrid()
{
dataGridView1.DataSource=\u modelList;
}
}
我的问题是,既然所有内容都在同一个项目中,并且模型类和子表单也在同一个文件夹中,那么为什么我会得到空行呢?如果我将它们公开,它工作正常。

From

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


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

这是一个很好的见解。这都是由于绑定引擎和PresentationFramework.dll绑定,因此无法访问属性。但在这种情况下,它不应该给出运行时异常吗?@priyankbhardwaj检查输出窗口。如果有,它应该在那里。我已经检查过了,O/P窗口中没有任何内容。
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;
    }
}