将类对象绑定到一个组合框(当没有该类的引用时)
本文关键字:引用 一个 绑定 对象 组合 | 更新日期: 2023-09-27 17:50:49
在UI层,我想从类的绑定列表中绑定一个组合框。该类是一个独立的业务实体,在UL层中不被引用。
//UI Layer
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "CustomerID";
comboBox1.DataSource = new CustomerFacade().getCustomers();
}
}
//Facade Class
public class CustomerFacade
{
public BindingList<Customer> getCustomers()
{
BindingList<Customer> objects = new BindingList<Customer>();
for (int i = 0; i < 10; i++)
{
objects.Add(new Customer() { Name = "Customer " + i.ToString(), CustomerID = i });
}
return objects;
}
}
//Business Entity Class
public class Customer
{
public Int32 CustomerID { get; set; }
public string Name { get; set; }
}
在这里我已经在同一个项目中声明了客户类,所以它工作得很好。但是,如果我将这个客户类保留在业务实体中(作为一个单独的项目),那么如果不添加业务实体的引用,它将无法工作。
如何加载值或绑定此组合框而不添加业务实体的引用?是否有其他方式,如转换为数组或数组列表将绑定我的组合框?
您需要的是Customer类的接口。将这个接口放在一个新项目中(通常这个项目称为Contracts)。每个项目都应参考合同项目。通过这种方式,你可以将一个实现接口的对象传递给另一个只需要知道接口的项目。我修改了你的代码来显示它。(我没有测试)
//UI Layer
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "CustomerID";
comboBox1.DataSource = new CustomerFacade().getCustomers();
}
}
//Facade Class
public class CustomerFacade
{
public BindingList<ICustomer> getCustomers()
{
BindingList<ICustomer> objects = new BindingList<ICustomer>();
for (int i = 0; i < 10; i++)
{
objects.Add(new Customer() { Name = "Customer " + i.ToString(), CustomerID = i });
}
return objects;
}
}
//Business Entity
public class Customer : ICustomer
{
public Int32 CustomerID { get; set; }
public string Name { get; set; }
}
//Contracts
public interface ICustomer
{
Int32 CustomerID { get; set; }
string Name { get; set; }
}
也许你可以通过搜索"dependency injection"找到更多的信息。
在您的Business Entity
中创建例如DataTable
,并将其用作数据源。
查看此线程的详细信息。
或者您可以创建字符串数组(使用toString
方法)。