ListBox.DisplayMember = [String]我可以以某种方式解决它不是.NET中的字符串吗?

Jey*_*han 3 .net data-binding refactoring strong-typing

询问有关对象数据源的问题.所以考虑一下我有一堂课

public class Customer{

    public String name;
    public int age;

    public Customer(String name, int age) {
         this.name = name;
         this.age = age;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经将列表框数据绑定到这些对象的列表中.所以我说

listBox.DisplayMember = "name";
Run Code Online (Sandbox Code Playgroud)

但我的问题是,当我将Customer类的名称重构为

public String fullName;
Run Code Online (Sandbox Code Playgroud)

DisplayMember仍然保持"名称".这将失败.所以它降低了我重构域对象的能力.这有什么办法吗?

All*_*ice 5

这是一种更性感,更灵活的解决方案

片段...

总而言之,不是写作:

textBoxCustomerName.DataBindings.Add("Text", bindingSource, "CustomerName");
Run Code Online (Sandbox Code Playgroud)

我的建议是写下这样的东西:

dataSource.CreateBinding(textBoxCustomerName, ctl => ctl.Text, data => data.Name);
Run Code Online (Sandbox Code Playgroud)

这样,当您重构实体时,您的代码仍然可以正常运行(假设您将客户的Name属性重命名为CompanyName).

很甜蜜呃?

此处还有一些解决方案如何使数据绑定类型安全并支持重构