使用 c#/WinForms 将数据绑定到重复用户控件中的控件

Binding data to controls in a Repeating user control with c#/WinForms

我正在使用 WinForms UI,我们需要动态添加重复控件。 我设法创建了一个包含所有标签和文本框的用户控件,并像这样添加它们:

for (int i= 0; i < 4;i ++) {
    tableLayoutPanel1.Controls.Add(new MyUserControl(),1,1);      
    //1,1 represent 1st row, 1st column of tablelayoutpanel 
} 

现在我找不到将不同数据绑定到每个控件的方法。例如:我需要在每次添加新的用户控件时在每个文本框中显示不同的联系信息。但是由于它是相同的 UserControl,文本框和标签具有相同的名称,我不确定如何使用相同的 UserControl 绑定不同的数据。

我需要这样的东西:我可以重复添加控件,但不能绑定数据: Screenshot

如有任何帮助,我们将不胜感激。

UserControl 添加到 TableLayoutPanel

的示例
for (int nCount = 0; nCount < 2; nCount++)
{
   CheckUserControl uc = new CheckUserControl();
   //If required Assign Value to the control
   uc.strValue = "Item " + nCount;
   uc.strTag = nCount.ToString();
   //You can pass the Column and Row value dynamically
   tableLayoutPanel1.Controls.Add(uc, 1, 1);
}

现在您可以使用标记值将数据绑定到适当的 UserControl

如果您正在创建自定义用户控件。您可以根据自己的喜好提供数据绑定功能。您可以在构造函数中使用参数来传递数据:

public MyUserControl(MyData mydata):this()
{ ...
}

您可以提供一个属性,稍后设置需要的数据:

public class MyUserControl()
{ 
   ...
   public MyData MyDataSource {get;set;}
}

您冷传递一个函数来收集数据:

 public MyUserControl(func<MyData> mydata):this()
 { 

 }

或检索数据的某种服务:

 public MyUserControl(IMyService myService):this()
 {
    Textbox1.Text = myService.GetImportantText();
 }

如果 MyData 实现 INotifyPropertyChanged(或任何自定义事件),您将能够对数据更改做出反应并显示它们。 我想您知道需要创建多少控件。如果是,您也知道为什么以及需要提供哪些数据。