在下拉列表框中绑定枚举

      我们曾经见过在 PropertyGrid中能自动用下拉列表列出我们自定义的枚举属性。这个自动列出枚举值的功能其实很简单。下面是模仿PropertyGrid实现一个遍历所有枚举绑定到下拉列表的功能:
假设:你定义了这样的一个枚举:
None.gif public   enum  ExceptionCategories 
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// Web界面异常
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        WebUI = 1
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 业务组件异常
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        Business,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 通用业务组件异常
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        Commom,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 引擎异常
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        Engine,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 文件组件异常
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        Files,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 接口业务处理异常
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        InterFaseBusiness,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 数据库异常
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        DataBase,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 进程级异常
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        Global
ExpandedBlockEnd.gif    }
或者,你偷懒,定义了这样的一个中文名称的枚举:
None.gif public   enum  ENUM_DEP_TYPE
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 未设置
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        未设置 = 0,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 建设单位,操作工程建设模块
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        建设单位 = 1,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 施工单位,操作施工协作模块
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        施工单位 = 2,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 监理单位,操作监理协作模块
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        监理单位 = 3,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 设计单位,操作设计协作模块
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        设计单位 = 4,
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 维护单位,操作工程建设模块
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        维护单位 = 5
ExpandedBlockEnd.gif    }
然后,你想在Winform或Webform界面上面放一个下拉列表框,把这些枚举给列出来让用户选择。最简单的方法就是在下拉列表中绑定我们已经建立好的枚举。实现如下:
None.gif string [] MyArray  =  Enum.GetNames( typeof (ENUM_DEP_TYPE));
None.gifcboDepartmentType.DataSource 
=  MyArray;   //cboDepartmentType是界面上下拉列表的名称
由下拉列表选中的项转换成枚举值方法如下:
None.gif if  (cboDepartmentType.SelectedIndex  >=   0 )
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
string strDepType = cboDepartmentType.Text;
InBlock.gif                ENUM_DEP_TYPE DepType 
= (ENUM_DEP_TYPE)Enum.Parse(typeof(ENUM_DEP_TYPE), strDepType);
ExpandedBlockEnd.gif            }
有了上面方法,你是不是可以实现系统的枚举 比如字体、颜色等绑定到你的列表中呢?

转载于:https://www.cnblogs.com/name-lh/archive/2006/08/03/466717.html

在WPF的MVVM架构中,如果你想要在`DataGrid`的`DataGridComboBoxColumn`中绑定一个枚举类型的值,并且这个选择可以反映到数据源上,你可以这样做: 首先,你需要创建一个`ICollectionView`或`ICollectionViewSource`来管理你的数据,并将枚举类型转换为字符串显示在下拉列表中。在ViewModel中,定义一个枚举类型的属性并提供它的字符串表示形式。 例如,假设你有一个`MyEnum`枚举和对应的`MyObject`类,它们之间的关联可以通过一个转换函数实现: ```csharp public enum MyEnum { Option1, Option2, Option3 } private string _selectedOption; public string SelectedOption { get { return _selectedOption; } set { SetProperty(ref _selectedOption, value); } } public object GetSelectedOptionValue() { switch (SelectedOption) { case "Option1": return MyEnum.Option1; // 添加其他选项的映射... } } ``` 然后,在`DataGrid`的`ItemsSource`中设置为你处理过的数据源,比如: ```xaml <DataGrid ItemsSource="{Binding DataSource}"> <DataGrid.Columns> <DataGridComboBoxColumn Header="Custom Column" Binding="{Binding Path=SelectedOption, ElementName=dataGrid}" DisplayMemberPath="DisplayName" SelectedValuePath="Value" /> </DataGrid.Columns> </DataGrid> ``` 在这里,`DataSource`是一个`ICollectionView`,`DisplayMemberPath`用于获取枚举的文本表示,`SelectedValuePath`用于获取实际的枚举值。 当你在`DataGridComboBoxColumn`中选择一个选项时,`SelectedOption`的值会被更新,同时`GetSelectedOptionValue()`会返回相应的枚举值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值