将类对象绑定到一个组合框(当没有该类的引用时)

本文关键字:引用 一个 绑定 对象 组合 | 更新日期: 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方法)。