【C#】在WPF中使用ComboBox绑定枚举类型

在WPF中使用ComboBox绑定枚举类型

一、实例

定义Enum:

internal enum StatusEnum
{
    [Description("待处理")]
    Pending,

    [Description("进行中")]
    InProgress,

    [Description("已完成")]
    Completed
}

定义扩展类,获取Description特性的内容:

internal static class EnumExtensions
{
    public static string GetDescription(this Enum value)
    {
        var field = value.GetType().GetField(value.ToString());
        var attribute = field?.GetCustomAttribute<DescriptionAttribute>();
        return attribute?.Description ?? value.ToString();
    }
}

值转换

internal class EnumToDescriptionConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is Enum enumValue)
        {
            return enumValue.GetDescription();
        }
        return value.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Enum.Parse(targetType, value.ToString());
    }
}

对象数据源

    <UserControl.Resources>
        <ObjectDataProvider x:Key="StatusEnumProvider" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="local:StatusEnum" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </UserControl.Resources>

ComboBox 绑定数据源

 <ComboBox ItemsSource="{Binding Source={StaticResource StatusEnumProvider}}"
       SelectedItem="{Binding SelectedStatus}"
           Width="140" FontSize="14"
           FontFamily="Microsoft Yahei UI"
           Cursor="Hand" >
     <ComboBox.ItemTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding Converter={StaticResource EnumToDescriptionConverter}}"/>
         </DataTemplate>
     </ComboBox.ItemTemplate>
 </ComboBox>

SelectedStatus要在ViewModel里定义

二、ObjectDataProvider

ObjectDataProvider 类在XAML中创建对象并将其用作数据源。

  <ObjectDataProvider x:Key="StatusEnumProvider"
  	MethodName="GetValues" 
  	ObjectType="{x:Type sys:Enum}">
      <ObjectDataProvider.MethodParameters>
          <x:Type TypeName="local:StatusEnum" />
      </ObjectDataProvider.MethodParameters>
  </ObjectDataProvider>
  • ObjectType - 数据要返回的对象类型
  • MethodName - 要在 System.Enum类型上运行的方法名称
  • MethodParameters - 要提供给 MethodName 方法的值的集合

等效于以下代码:

 var itemsSource= System.Enum.GetValues(typeof(StatusEnum));
C#和Windows Presentation Foundation (WPF)中,ComboBox(组合框)通常用于提供下拉列表让用户选择,它常用于数据绑定。当你想将ComboBox与数据源关联起来时,可以按照以下步骤操作: 1. **设置数据源**:首先,你需要创建一个包含数据的ObservableCollection或ICollectionView类型的集合。例如,你可以有一个人员列表(Person[]、List<Person> 或 PersonCollectionView)。 ```csharp List<Person> personList = new List<Person>(); ``` 2. **设置绑定**:在XAML文件中,通过`ItemsSource`属性将数据源绑定ComboBox上。假设ComboBox的Name是`comboBox1`: ```xml <ComboBox x:Name="comboBox1"> <ComboBox.ItemsSource> <Binding Source="{StaticResource personList}" /> </ComboBox.ItemsSource> </ComboBox> ``` 这里,`{StaticResource personList}`表示你在XAML资源管理器中引用了personList。 3. **显示属性和值**:如果ComboBox需要显示每个Person的某个属性(如姓名),可以添加`DisplayMemberPath`属性指定要显示的字段: ```xml <ComboBox x:Name="comboBox1" DisplayMemberPath="Name" /> ``` 4. **用户选择事件**:当用户从列表中选择项时,可以通过`SelectedValue`或`SelectedValuePath`以及`SelectedValueChanged`事件处理程序获取选中的值。 ```csharp comboBox1.SelectedValueChanged += comboBox_SelectedValueChanged; private void comboBox_SelectedValueChanged(object sender, SelectionChangedEventArgs e) { var selectedItem = comboBox1.SelectedItem as Person; // 处理选定项的逻辑 } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值