C# ListBox设置DisplayMember显示双属性失败,显示Id问题求助
问题分析与解决方案
你遇到的问题核心很明确——你给DisplayMember指定了一个不存在的属性名LastNameFirstName,数据绑定系统找不到这个属性,就会回退显示对象的默认字符串表示(你看到显示Id,本质是绑定失败后的 fallback 逻辑导致的)。
方法一:新增计算属性(推荐,贴合数据绑定设计)
在Customer类中添加一个只读属性,返回你需要的格式:
public class Customer { // 原有代码... #region Properties // 原有属性... public string LastNameFirstName { get { return $"{LastName} {FirstName}"; } } #endregion }
这样你原来的绑定代码无需修改,lbxCustomers.DisplayMember = "LastNameFirstName";就能正常识别并显示"SMITH Robert"格式的内容。
方法二:重写ToString()方法
如果不想新增属性,也可以直接重写Customer类的ToString()方法,ListBox在找不到DisplayMember时会自动调用这个方法:
public class Customer { // 原有代码... public override string ToString() { return $"{LastName} {FirstName}"; } }
此时你可以保留或移除DisplayMember的设置,都能正常显示目标格式。
补充说明
你的Customer类同时包含老式的GetXXX/SetXXX方法和C#属性,建议统一使用属性写法,更符合现代C#的编码规范。
内容的提问来源于stack exchange,提问作者nboulfroy
相关产品推荐
相关产品推荐

