C# Visual Studio设计器无法选择List作为ListBox数据源的解决方法
WinForm ListBox 绑定自定义List集合数据源实现方案
首先明确核心规则:*.Designer.cs文件是设计器根据控件的设计时状态自动序列化生成的,所有手动写入的非设计器生成代码,都会在下次界面编辑保存时被覆盖,自定义业务逻辑绝对不要写在这个文件里。
设计器的DataSource属性下拉列表默认只展示可在设计时实例化的数据源组件(比如DataSet、ObjectDataSource、实现了IListSource接口的组件等),你定义在普通类中的List集合不满足设计时识别规则,自然不会出现在可选列表里。
方法1:代码后置绑定(推荐,最灵活)
直接在窗体对应的业务代码文件(和Designer.cs配对的窗体类文件,比如MyWinform.cs)的构造函数中写绑定逻辑,注意代码必须写在InitializeComponent()方法调用之后,这部分代码完全由你控制,不会被设计器清除。
示例代码:
public MyWinform() { InitializeComponent(); // 设计器生成的控件初始化方法,必须保留在最前 // 下方写自定义绑定逻辑 this.listbox1.DataSource = Namespace1.MyWinform.MyList.ToArray(); // 如果List存储的是自定义类对象,需要指定显示的属性名,比如要显示对象的Name属性则添加: // this.listbox1.DisplayMember = "Name"; }
如果你的集合需要动态增删、要求ListBox自动同步显示内容,把普通List<T>替换为BindingList<T>即可,无需手动调用刷新方法。
方法2:使用ObjectDataSource组件实现纯设计器配置
如果不想手动写绑定代码,完全通过设计器配置完成绑定,可以借助ObjectDataSource组件桥接:
- 打开窗体设计器,在左侧工具箱的「数据」分类中找到
ObjectDataSource组件,拖拽到窗体上,组件会显示在窗体底部的组件托盘区 - 点击组件右上角的智能标记(小三角图标),选择「配置数据源」
- 在弹出的配置向导中,选择你存放List集合的类作为业务对象(注意该类不能是静态类,必须包含公开无参构造函数)
- 下一步选择返回目标List集合的方法作为SelectMethod,完成向导配置
- 选中ListBox控件,在属性窗口找到DataSource属性,下拉选择刚才创建的ObjectDataSource实例即可,这部分配置会被设计器自动序列化,不会被清除。
注意:如果你的List是静态成员,方法2无法直接支持,优先使用方法1实现。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

