【WPF】【C#】【代码记录】构造ComboBox下拉的数据源(字典类型 Dictionary<string, T> T : Enum)
#region 下拉 private Dictionary<string, T> getComboSource<T>(params T[] types) where T : Enum { var enumValues = types.Length > 0 ? types : (T[])Enum.GetValues(typeof(T)); return enumValues.ToDictionary(o => getTypeName(o), o => o); } private string getTypeName<T>(T type) where T : Enum { var member = type.GetType().GetMember(type.ToString()); if (member.Length > 0) { var attributes = member[0].GetCustomAttributes(typeof(DisplayAttribute), false); if (attributes.Length > 0) { return ((DisplayAttribute)attributes[0]).GetName(); } } return type.ToString(); } #endregion
调用的方式例如:
/// <summary> /// 形状下拉 /// </summary> public Dictionary<string, ShapeType> CalibrationShapeTypeComboSource { get { return _calibrationShapeTypeComboSource; } set { SetProperty(ref _calibrationShapeTypeComboSource, value); } } /// <summary> /// 有效、禁用区域下拉 /// </summary> public Dictionary<string, AreaType> AreaTypeComboSource { get { return _areaTypeComboSource; } set { SetProperty(ref _areaTypeComboSource, value); } } // 这样调用 CalibrationShapeTypeComboSource = getComboSource(ShapeType.Rectangle, ShapeType.Circle, ShapeType.RotatedRectangle, ShapeType.LineSegment); // 如果传了参数,按照参数的来;如果没传参,获取枚举的所有值 AreaTypeComboSource = getComboSource<AreaType>();
结果:
枚举要声明Display
public enum ShapeType { None, /// <summary> /// 线段 /// </summary> [Display(Name = "线段")] LineSegment, /// <summary> /// 矩形 /// </summary> [Display(Name = "矩形")] Rectangle, /// <summary> /// 旋转矩形 /// </summary> [Display(Name = "旋转矩形") RotatedRectangle, /// <summary> /// 圆形 /// </summary> [Display(Name = "圆形")] Circle, /// <summary> /// 多边形 /// </summary> [Display(Name = "多边形")] Polygon }
public enum AreaType { /// <summary> /// 有效区 /// </summary> [Display(Name = "有效区")] ValidArea, /// <summary> /// 屏蔽区 /// </summary> [Display(Name = "屏蔽区")] MaskedArea, /// <summary> /// 禁用区 /// </summary> [Display(Name = "禁用区")] DisabledArea }
后续再定义类似字典只需三步:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义