如何检索ComboBox选择的值作为枚举类型?

问题描述

| 这是我的
Enum
代码
public enum EmployeeType
{
    Manager,Worker
}
我将初始化
ComboBox
值,而窗体将自身初始化为
 comboBox1.ItemsSource = Enum.GetValues(typeof(EmployeeType));
现在我想将选定的
ComboBox
值检索为
EmployeeType
枚举,而不是字符串或整数等。 任何帮助表示赞赏。     

解决方法

EmployeeType selected = (EmployeeType)combobox1.SelectedItem;
不过,您可能想先检查是否为空(无选择)。 为了完整起见,这是我设置的示例程序。 XAML:
<Window x:Class=\"WpfApplication1.MainWindow\"
        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"
        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"
        Title=\"MainWindow\" Height=\"350\" Width=\"525\">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <ComboBox x:Name=\"_ComboBox\" />
        <Button Grid.Row=\"1\" Click=\"Button_Click\" />
    </Grid>
</Window>
和背后的代码:
using System;
using System.Windows;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            _ComboBox.ItemsSource = Enum.GetValues(typeof(Whatever));
        }

        public enum Whatever
        {
            One,Two,Three,Four
        }

        private void Button_Click(object sender,RoutedEventArgs e)
        {
            if (_ComboBox.SelectedItem == null)
            {
                MessageBox.Show(\"No Selection\");
            }
            else
            {
                Whatever whatever = (Whatever)_ComboBox.SelectedItem;
                MessageBox.Show(whatever.ToString());
            }
        }
    }
}
    ,对于给定的字符串,您只需要进行相反操作即可,正确的类型是什么。
EmployeeType result = 
          (EmployeeType)Enum.Parse(typeof(EmployeeType),combobox1.SelectedItem.Content);
附言我不知道ѭ10是否正确,我做的WCF也不多。     ,尝试这样的事情: 首先将组合框分配给GetNames方法,这将使用枚举名称而不是数字填充项目。 然后处理更改后的事件,并将字符串解析回枚举。
    public enum EmployeeType
    {
        Manaer,Worker
    }

    public MainWindow()
    {
        InitializeComponent();
        this.combobox1.ItemsSource = Enum.GetNames(typeof(EmployeeType));
        this.combobox1.SelectionChanged += new SelectionChangedEventHandler(combobox1_SelectionChanged);
    }

    void combobox1_SelectionChanged(object sender,SelectionChangedEventArgs e)
    {
        EmployeeType selection = (EmployeeType)Enum.Parse(typeof(EmployeeType),(string)this.combobox1.SelectedItem);
        this.ResultsTextBlock.Text = selection.ToString();
    }
要添加的一件事是,您可以向每个枚举添加数据注释的Display属性,并编写一种方法来解析该枚举并显示该属性的name属性,而不是使该枚举更加用户友好。     ,实际上,如果必须这样做,我会在绑定之前构建一个
ObservableCollection<EmployeeType>
(例如,在视图模型的构造函数中,使用
Enum.GetNames(typeof(EmployeeType))
,然后迭代每个值以将它们重新解析为
EmployeeType
类型。 设置好收藏集后,只需将其绑定到
ComboBox
,然后在选择一个项目时,应检索
EmployeeType
类型,而不必解析它。
public class VieModel
{
    private ObservableCollection<EmployeeType> _internal;
    public ViewModel()
    {
       _internal = new ObservableCollection<EmployeeType>();
       var tempList =  Enum.GetNames(typeof(EmployeeType));

       foreach(var val in tempList)
       {
           EmployeeType et = Enum.Parse(typeof(EmployeeType),val);
           internal.Add(et);
       }
    }

    public ObservableCollection<EmployeeType> EmployeeTypes
    {
       get { return _internal; }
    }
}
然后将视图模型设置为视图的数据上下文,并将组合框绑定到
EmployeeTypes
 <ComboBox ItemsSource=\"{Binding EmployeeTypes}\" />
所选对象应返回类型为“ 5”的对象。 PS:抱歉代码拼写错误,我现在附近没有C#编辑器;)